原文: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>