原文:https://blog.csdn.net/cw_hello1/article/details/51923814html
1、logger标签描述:(了解logger标签以前先看看两个重要概念)
1.主要概念:★★级别继承(level inheritance)
1)root标签是全部logger的祖先元素,全部的logger都继承与root元素,至关于java中的object对象。
2)每个logger标签均可以指定一个级别(TRACE,DEBUG,INFO,WARN,ERROR五种,他们是在class中定义的)。ch.qos.logback.classic.Level
3)若是一个指定的logger标签没有指定规则的话,就会继承离他最近的祖先的级别。
4)由于全部的logger都是继承root标签,因此为了确保全部的logger都有一个级别,root标签有一个默认的级别,默认值为DEBUG
5)看看下面四个例子:
2.重要概念:★★基本选择规则(base selection rule):
1)任何一个logger对象都有五种级别,因此就对应有五种打印日志方法:logger.info(字符串),logger.debug(字符串)
2)若是使用logger.info(字符串)的话,那么logger打印级别就是INFO。
3)看看一个logger能不能打印出日志主要看两个因素:①打印方法时使用的级别(logger.info()),②logger对象的有效级别。第一个
重要概念所讲。
4)如何判断是否打印出日志:规则以下:
A log request of level p issued to a logger having an effective level q, is enabled if p >= q.
一个logger打印级别为P,而他的有效级别为q。若是p>=q的话,p对应的信息能打印出来。不然就不能打印出对应的信息。
记住:有效级别是最低级别,高于有效级别的信息都能打印出来,低于有效级别都不能打印出来。
5)级别大小规则:TRACE<DEBUG<INFO<WARN<ERROR。
6)例如:
3.logger结构:
1)一个logger标签包含:一个强制的name属性,一个可选的level属性和一个可选的additivity属性(additivity的值有true和false)
2)level属性的值:能够是TRACE,DEBUG,INFO,WARN,ERROR,OFF,ALL中任何一个,而且不区分大小写。若是没有写
的话就会继承离他最近的祖先的级别,就是第一个概念的内容。
3)其中name的值,很重要,而且是必须的。它主要是指定包名或者类名的全路径(包含包名)。全部的logger对象都是经过这个来肯定
祖先关系的。
4)logger标签能够包含0个或者多个appender-ref标签,因此每个appender标签均可以关联到指定的logger中。
5)level默认是以覆盖的方式继承的。而appender-ref是附加的形式继承的。
1)覆盖方式:若是父亲的级别是DEBUG,若是在这个logger中设置了INFO,最终这个logger的级别就是INFO
2)附加方式:若是在父亲中有一个appender-ref(关联一个appender标签),在当前这个logger中也设置一个appender-ref,
那么当前的logger就有两个appender-ref的关联。若是想要改变默认的附加形式,那就要使用addtivity属性值。
<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" /><!--STDOUT绑定到chapters.configuration上,这个logger的祖先是root--> </logger> <root level="debug"><!--在root上也绑定STDOUT的appender对象到root上。--> <appender-ref ref="STDOUT" /> </root> </configuration>
<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>