赞
踩
logback日志配置
一、日志级别已经输出规则:
日志级别从高到低:OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL
日志输出规则:根据当前ROOT 级别,日志输出时,级别高于root默认的级别时会输出。
二、根节点<configuration>包含的属性
scan:当此属性设置为true时,配置文件如果发生改变,将会被从新加载,默认为true。
scanPeriod:设置监测文件是否有修改的时间间隔,如果没有给出时间单位,默认单位为毫秒。当scan为true时,此属性生效。默认为1分钟。
debug:当此属性设置成true时,将打印出logback内部的日志信息,实时查看logback运行状态。默认值为false。
例如:
- <configuration scan="true" scanPeriod="60 seconds" debug="false>
- <!--其他配置省略-->
- </configuration>
三、根节点<configuraion>的子节点
该根节点一功有三个子节点,appender、logger、root。
下面详细说明各个子节点的用处:
(1)<contextName>
设置上下文名称。每个logger都关联到logger上下文,默认上下文名称为“default”。但可以使用<contextName>修改成其他名字,用于区分不同应用程序的记录。一旦设置,不能够修改。
- <configuration scan="true" scanPeriod="60 seconds" debug="false>
- <contextName>myAppname</contextName>
- <!--其他配置省略-->
- </configuration>
(2)<property>
设置变量值的标签。该标签设置的值会被插入到logger的应用上下文中,到后面可以通过${}来访问。该标签中有两个属性,name和value,前者是标签的名字,后者是标签的值。
- <configuration scan="true" scanPeriod="60 seconds" debug="false>
- <property name="APP_NAME" value="myAppname"/>
- <contextName>${APP_NAME}</contextName>
- <!--其他配置省略-->
- </configuration>
(3)<timestamp>
获取时间戳字符串。
此标签有两个属性,key和datePattern。前者是标签的名字,后者是设置当前时间转换成字符串的模式。
- <configuration scan="true" scanPeriod="60 seconds" debug="false>
- <timestamp key="bySecond" value="yyyyMMdd'T'HHmmss"/>
- <contextName>${bySecond}</contextName>
- <!--其他配置省略-->
- </configuration>
(4)<logger>
设置某一个包或者类的日志打印级别、以及指定相应的<appender>。该标签有把三个属性。name、level和addtivity。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置日志的打印级别,大小写无关。这个属性可以没有,如果没有则继承上级的级别,如果设置成INHERITED或者同义词NULL,代表强制执行上级的级别。
addtivity:是否向上级logger传递打印信息,默认是true。
注意:<logger>可以包含零个或多个<appender-ref>元素,标识这个appender将会添加到这个log中。
(5)<root>
<root>元素也是logger元素,不同的是他是根logger。只有一个level属性,因为已经被命名为“root”。
三、应用实例
(1)只配置root
logback.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoder 默认配置为PatternLayoutEncoder -->
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
- </encoder>
- </appender>
-
-
- <root level="INFO">
- <appender-ref ref="STDOUT" />
- </root>
-
-
- </configuration>
测试方法
- @Test
- public void testLogback(){
- logger.debug("debug");
- logger.info("info");
- logger.warn("warn");
- logger.error("error");
- }
@Test
public void testLogback(){
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
输出内容
23:14:42.697 [main] INFO com.liutao.userTest.UserTest - info
23:14:42.697 [main] WARN com.liutao.userTest.UserTest - warn
23:14:42.697 [main] ERROR com.liutao.userTest.UserTest - error
(2)带有logger的配置,不指定级别,不指定appender
logback.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoder 默认配置为PatternLayoutEncoder -->
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
- </encoder>
- </appender>
- <!-- logback为java中的包 -->
- <logger name="com.liutao.userTest"/>
- <root level="INFO">
- <appender-ref ref="STDOUT" />
- </root>
-
-
- </configuration>
测试方法
- @Test
- public void testLogback(){
- logger.debug("debug");
- logger.info("info");
- logger.warn("warn");
- logger.error("error");
- }
@Test
public void testLogback(){
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
输出内容
23:14:42.697 [main] INFO com.liutao.userTest.UserTest - info
23:14:42.697 [main] WARN com.liutao.userTest.UserTest - warn
23:14:42.697 [main] ERROR com.liutao.userTest.UserTest - error
注意:
该<logger>标签将控制com.liutao.userTest包下所有类的日志的打印,但是并没有设置日志打印的级别,从而继承上级<root>的日志打印级别“DEBUG”。
没有设置addtivity,默认为true,将此logger打印信息向上级传递。
没有设置appender,此logger本身不打印任何日志。
<root level="DEBUG">将root的打印级别设置为“DEBUG”,指定了名字为“STDOUT”的appender。
(3)带有多个logger的配置,指定级别,指定appender。
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoder 默认配置为PatternLayoutEncoder -->
- <encoder>
- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
- </encoder>
- </appender>
- <!-- logback为java中的包 -->
- <logger name="com.liutao.userTest"/>
-
-
- <!--指定类的全路径名-->
- <logger name="com.liutao.userTest.UserTest" level="INFO" additivity="false">
- <appender-ref ref="STDOUT"/>
- </logger>
- <root level="ERROR">
- <appender-ref ref="STDOUT" />
- </root>
-
-
- </configuration>
测试方法
- @Test
- public void testLogback(){
- logger.debug("debug");
- logger.info("info");
- logger.warn("warn");
- logger.error("error");
- }
@Test
public void testLogback(){
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
}
输出内容
23:14:42.697 [main] INFO com.liutao.userTest.UserTest - info
23:14:42.697 [main] WARN com.liutao.userTest.UserTest - warn
23:14:42.697 [main] ERROR com.liutao.userTest.UserTest - error
注意:
<logger name="com.liutao.userTest" />将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级<root>的日志级别“DEBUG”;
没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
没有设置appender,此loger本身不打印任何信息。
<logger name="com.liutao.userTest.UserTest" level="INFO" additivity="false">控制com.liutao.userTest.UserTest类的日志打印,打印级别为“INFO”;
additivity属性为false,表示此loger的打印信息不再向上级传递,
指定了名字为“STDOUT”的appender。
<root level="DEBUG">将root的打印级别设置为“ERROR”,指定了名字为“STDOUT”的appender。
当执行com.liutao.userTest.UserTest方法时,先执行<logger name="com.liutao.userTest.UserTest" level="INFO" additivity="false">,将级别为“INFO”及大于“INFO”的日志信息交给此loger指定的名为“STDOUT”的appender处理,在控制台中打出日志,不再向次loger的上级 <logger name="com.liutao.userTest"/> 传递打印信息;
<logger name="com.liutao.userTest"/>未接到任何打印信息,当然也不会给它的上级root传递任何打印信息;
但是,这里如果将additivity设置成true,日志将打印两次。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。