logback 配置
来源:互联网 发布:sql创建临时表 编辑:程序博客网 时间:2024/05/20 14:43
logback依據以下初始化步驟來配置自己:
1,logback试图在classpath中找到一个名为logback.groovy的文件。
2,如果没有找到这样的文件,logback试图在classpath中找到一个名为的logback-的test.xml的文件。
3,如果没有找到这样的文件,它会检查在classpath中的logback.xml文件..
4,如果没有这样的文件被发现,且执行的JVM具有的ServiceLoader(JDK 6以上),ServiceLoader将用于解决對com.qos.logback.classic.spi.Configurator的实现。找到的第一个实现将被使用。有关详细信息,请参阅 ServiceLoader documentation for more details。
5,如果上面的没有成功,logback会自动使用BasicConfigurator來配置自己,这将导致日志定向输出到控制台。
自動配置
假设logback的配置文件logback-test.xml或logback.xml不存在,logback将默认调用BasicConfigurator,設置最精簡配置。这个最小的配置包括一个ConsoleAppender設置在root logger下。 使用PatternLayoutEncoder進行輸出格式化,格式爲 %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n。此外,在默认情况下根记录器被指定爲debug级别。
package manual.configuration;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class MyApp1 { final static Logger logger = LoggerFactory.getLogger(MyApp1.class); public static void main(String[] args) { logger.info("Entering application."); Foo foo = new Foo(); foo.doIt(); logger.info("Exiting application."); }}
package chapters.configuration; import org.slf4j.Logger;import org.slf4j.LoggerFactory; public class Foo { static final Logger logger = LoggerFactory.getLogger(Foo.class); public void doIt() { logger.debug("Did it again!"); }}
16:06:09.031 [main] INFO chapters.configuration.MyApp1 - Entering application.
16:06:09.046 [main] DEBUG chapters.configuration.Foo - Did it again!
16:06:09.046 [main] INFO chapters.configuration.MyApp1 - Exiting application.
使用logback-test.xml 或 logback.xml配置
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root></configuration>
這種配置的效果等同於前面提到的自動配置
<configuration debug="true"> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root></configuration>在<configuration>中设置调试属性元素,将输出status信息
<configuration scan="true" scanPeriod="30 seconds" > ...</configuration>
logback配置文件更改時,可以自動扫描發現,并自动重新配置。(默認爲間隔60秒掃描)
logback將其内部状态数据收集在一个StatusManager对象中,可经由LoggerContext访问。
在WEB-INF/web.xml文件增加以下內容,從而添加相關servlet到web application中,可通過http://host/yourWebapp/lbClassicStatus訪問。
<servlet> <servlet-name>ViewStatusMessages</servlet-name> <servlet-class>ch.qos.logback.classic.ViewStatusMessagesServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ViewStatusMessages</servlet-name> <url-pattern>/lbClassicStatus</url-pattern> </servlet-mapping>
配置語法
例子程序
package chapters.configuration;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import ch.qos.logback.classic.LoggerContext;import ch.qos.logback.classic.joran.JoranConfigurator;import ch.qos.logback.core.joran.spi.JoranException;import ch.qos.logback.core.util.StatusPrinter;public class MyApp3 { final static Logger logger = LoggerFactory.getLogger(MyApp3.class); public static void main(String[] args) { // assume SLF4J is bound to logback in the current environment LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory(); try { JoranConfigurator configurator = new JoranConfigurator(); configurator.setContext(context); // Call context.reset() to clear any previous configuration, e.g. default // configuration. For multi-step configuration, omit calling context.reset(). context.reset(); configurator.doConfigure(args[0]); } catch (JoranException je) { // StatusPrinter will handle this } StatusPrinter.printInCaseOfErrorsOrWarnings(context); logger.info("Entering application."); Foo foo = new Foo(); foo.doIt(); logger.info("Exiting application."); }}
package chapters.configuration; import org.slf4j.Logger;import org.slf4j.LoggerFactory; public class Foo { static final Logger logger = LoggerFactory.getLogger(Foo.class); public void doIt() { logger.debug("Did it again!"); }}
对于一个给定的标签名,如果不能确定,遵守按照驼峰约定几乎总是正确的习惯。
Logger配置
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration" level="INFO"/> <!-- Strictly speaking, the level attribute is not necessary since --> <!-- the level of the root level is set to DEBUG by default. --> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration>進行如上配置,輸出:
17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Entering application.
17:34:07.578 [main] INFO chapters.configuration.MyApp3 - Exiting application.
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <logger name="chapters.configuration" level="INFO" /> <logger name="chapters.configuration.Foo" level="DEBUG" /> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root></configuration>輸出
17:39:27.593 [main] INFO chapters.configuration.MyApp3 - Entering application.
17:39:27.593 [main] DEBUG chapters.configuration.Foo - Did it again!
17:39:27.593 [main] INFO chapters.configuration.MyApp3 - Exiting application.
此時logger的級別情況:
DEBUG
DEBUG
chapters.configurationINFO
INFO
chapters.configuration.MyApp3null
INFO
chapters.configuration.FooDEBUG
DEBUG
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern> %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n </pattern> </encoder> </appender> <logger name="chapters.configuration" level="INFO" /> <!-- turn OFF all logging (children can override) --> <root level="OFF"> <appender-ref ref="STDOUT" /> </root></configuration>
此時logger的級別情況:
OFF
OFF
chapters.configurationINFO
INFO
chapters.configuration.MyApp3null
INFO
chapters.configuration.Foonull
INFO
輸出17:52:23.609 [main] INFO chapters.configuration.MyApp3 - Entering application.
17:52:23.609 [main] INFO chapters.configuration.MyApp3 - Exiting application.
Appender配置
<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>myApp.log</file> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="FILE" /> <appender-ref ref="STDOUT" /> </root></configuration>
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration"> <appender-ref ref="STDOUT" /> </logger> <root level="debug"> <appender-ref ref="STDOUT" /> </root></configuration>默認下,appender是繼承並累積的。
輸出
14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
14:25:36.343 [main] INFO chapters.configuration.MyApp3 - Entering application.
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] DEBUG chapters.configuration.Foo - Did it again!
14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
14:25:36.359 [main] INFO chapters.configuration.MyApp3 - Exiting application.
<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>myApp.log</file> <encoder> <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern> </encoder> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration"> <appender-ref ref="FILE" /> </logger> <root level="debug"> <appender-ref ref="STDOUT" /> </root></configuration>
<configuration> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>foo.log</file> <encoder> <pattern>%date %level [%thread] %logger{10} [%file : %line] %msg%n</pattern> </encoder> </appender> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration.Foo" additivity="false"> <appender-ref ref="FILE" /> </logger> <root level="debug"> <appender-ref ref="STDOUT" /> </root></configuration>
本例中,logger chapters.configuration.Foo將其相加标志设置为false,將不會繼承父類的appenders。
設置loggercontext名字
<configuration> <contextName>myAppName</contextName> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d %contextName [%t] %level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root></configuration>
變量替換
<configuration> <property name="USER_HOME" value="/home/sebastien" /> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>${USER_HOME}/myApp.log</file> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="FILE" /> </root></configuration>
<configuration> <property file="src/main/java/chapters/configuration/variables1.properties" /> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>${USER_HOME}/myApp.log</file> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="FILE" /> </root></configuration>您也可以引用在类路径下的资源而不是一个文件。
<configuration> <property resource="resource1.properties" /> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>${USER_HOME}/myApp.log</file> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="FILE" /> </root></configuration>
變量作用域
3種,local ,context ,system ,默認爲local。
<configuration> <property scope="context" name="nodeId" value="firstNode" /> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <file>/opt/${nodeId}/myApp.log</file> <encoder> <pattern>%msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="FILE" /> </root></configuration>
- logback配置
- Logback 配置
- logback配置
- logback配置
- logback 配置
- Logback配置
- logback 配置
- logback.配置
- LogBack配置
- logback配置
- logback配置
- logback配置
- logback配置
- logback配置
- logback配置
- Logback配置
- logback配置---Spring集成logback
- logback.xml配置
- PO VO DTO BO区别及用法
- 轻松学习JavaScript十九:DOM编程学习之在HTML文档什么位置编写JS代码
- 【Linux】对比直接编译进内核和模块形式
- SpannableString、ClickableSpan
- thinkphp3.2.3 相关
- logback 配置
- Labwindows/CVI程序调用C#生成的Dll文件
- Lua学习笔记(3) : 在C++中调用Lua函數
- Wireshark 网络抓包工具介绍、应用及一个案例
- udp组播试验-C语言
- SpannableString中的LinkMovementMethod和ClickableSpan的实现安卓可点击有颜色文字使用
- Android Studio for Ubuntu 14.04 无法输入中文解决办法
- socket传输文件例子
- n皇后问题--拉斯维加斯