logback日志详解

 

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,日志将打印两次。

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值