把logback或者log4j放在src/main/resources下,Spring容器就能夠自動加載日誌文件。
java
Logback是由log4j創始人設計的又一個開源日誌組件, 比log4j的性能好.api
<!--這個依賴直接包含了 logback-core 以及 slf4j-api的依賴--> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
logback在啓動的時候,會按照下面的順序加載配置文件:app
logback.configurationFile
屬性,就用該屬性指定的配置文件。java -Dlogback.configurationFile=/path/to/mylogback.xml Test
,這樣執行Test類的時候就會加載/path/to/mylogback.xml
配置.logback.groovy
文件logback-test.xml
文件logback.xml
文件com.qos.logback.classic.spi.Configurator
接口的第一個實現類,ch.qos.logback.classic.BasicConfigurator
,在控制檯輸出日誌.設置日誌上下文名稱,後面輸出格式中能夠經過定義%contextName
來打印日誌上下文名稱性能
用來設置相關變量,經過key-value的
方式配置,而後在後面的配置文件中經過${key}
來訪問this
appender
ConsoleAppender
:向控制檯輸出日誌內容的組件,只要定義好encoder
節點就可使用。
<encoder>
:對記錄事件進行格式化。filter
:定義了一個過濾器,在LEVEL
之下的日誌輸出不會被打印出來FileAppender
:向文件輸出日誌內容的組件,用法也很簡單,不過因爲沒有日誌滾動策略,通常不多使用RollingFileAppender
:向文件輸出日誌內容的組件,同時能夠配置日誌文件滾動策略,在日誌達到必定條件後生成一個新的日誌文件. 它有下面幾個子節點:
<file>
:被寫入的文件名,能夠是相對目錄,也能夠是絕對目錄,若是上級目錄不存在會自動建立,沒有默認值。<append>
:若是是 true,日誌被追加到文件結尾,若是是 false,清空現存文件,默認是true。<encoder>
:對記錄事件進行格式化。Policy
:兩個經常使用熱門的策略,TimeBaseRollingPolicy
, SizeBasedTriggeringPolicy
TimeBaseRollingPolicy
:根據fileNamePattern
標籤來表示什麼週期觸發一次,生成新的日誌文件SizeBasedTriggeringPolicy
:表示基於文件大小進行滾動<rollingPolicy>
:當發生滾動時,決定RollingFileAppender
的行爲,涉及文件移動和重命名。<triggeringPolicy>
: 告知RollingFileAppender
什麼時候激活滾動。<prudent>
:當爲true時,不支持FixedWindowRollingPolicy
。支持TimeBasedRollingPolicy
,可是有兩個限制,1不支持也不容許文件壓縮,2不能設置file屬性,必須留空。filter
:定義了一個過濾器,在LEVEL之
下的日誌輸出不會被打印出來name
:用來指定受此loger約束的某一個包或者具體的某一個類。level
:用來設置打印級別(日誌級別),大小寫無關:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,還有一個特俗值INHERITED或者同義詞NULL,表明強制執行上級的級別。若是上面的logger沒有設置level屬性, 會繼承root的屬性addtivity
:是否向上級loger傳遞打印信息。默認是true。咱們可使用logger節點的additivity="false"屬性來屏蔽rootLogger的appender。這樣就能夠不使用rootLogger的appender輸出日誌了。<logger>
能夠包含零個或多個<appender-ref>
元素,標識這個appender將會添加到這個loger。spa
root
與logger
同時引入同一個appender
,而且additivity="true"
,則這個appender
會輸出多份
。level
默認是以覆蓋的方式繼承的,若是父親
的級別是DEBUG
,若是在這個logger
中設置了INFO
,最終這個logger的級別就是INFO
。logger
標籤沒有指定level
的話,就會繼承離他最近的祖先的級別
。appender
指定了filter
,logger
不用寫level屬性。<?xml version="1.0" encoding="utf-8"?> <!--scan:當此屬性設置爲true時,配置文件若是發生改變,將會被從新加載,默認值爲true。--> <!--scanPeriod:設置監測配置文件是否有修改的時間間隔,若是沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。--> <!--debug:當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。--> <configuration scan="true" scanPeriod="60 seconds" debug="false"> <!--日誌上下文名稱--> <contextName>logback</contextName> <!--定義參數常量--> <property name="log.level" value="debug"></property> <property name="log.maxHistory" value="30"></property> <property name="log.filePath" value="/"></property> <property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"> </property> <!--級別從高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 DEBUG 、 TRACE 、 ALL--> <!--日誌輸出規則:根據當前ROOT級別,日誌輸出時,級別高於root默認的級別時會輸出--> <!--控制檯設置--> <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"> <!--記錄事件進行格式化--> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!--日誌文件--> <!--滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件時,將日誌記錄到其餘文件RollingFileAppender--> <!--debug--> <appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--文件路徑--> <file>${log.filePath}/debug.log</file> <!--當發生滾動時,決定RollingFileAppender的行爲,涉及文件移動和重命名。--> <!--最經常使用的滾動策略,它根據時間來制定滾動策略.既負責滾動也負責觸發滾動。根據<fileNamePattern>肯定滾動時間--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--文件名稱--> <fileNamePattern>${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.zip</fileNamePattern> <!--文件最大保存歷史 30天--> <maxHistory>${log.maxHistory}</maxHistory> <!--日誌文件最大的大小--> <MaxFileSize>5M</MaxFileSize> </rollingPolicy> <!--記錄事件進行格式化--> <encoder> <pattern>${log.pattern}</pattern> </encoder> <!--定義了一個過濾器,在level之下的日誌輸出不會被打印出來--> <!--這裏定義了DEBUG,也就是控制檯不會輸出比DEBUG級別小的日誌--> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <!-- 設置過濾級別 --> <level>DEBUG</level> <!--ACCEPT–打印 DENY– 不打印 NEUTRAL–中立--> <!-- 用於配置符合過濾條件的操做 --> <onMatch>ACCEPT</onMatch> <!-- 用於配置不符合過濾條件的操做 --> <onMismatch>DENY</onMismatch> </filter> </appender> <!--info--> <appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--文件名稱--> <file>${log.filePath}/info.log</file> <!--按照固定窗口模式生成日誌文件,當文件大於5MB時,生成新的日誌文件。窗口大小是1到3,當保存了3個歸檔文件後,將覆蓋最先的日誌。--> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <fileNamePattern>${log.filePath}/info/info.%d{yyyy-MM-dd}.log.zip</fileNamePattern> <minIndex>1</minIndex> <maxIndex>3</maxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <maxFileSize>5MB</maxFileSize> </triggeringPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>INFO</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> </appender> <!--設置一個向上傳遞的appender,全部級別的日誌都會輸出--> <appender name="appender" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${log.filePath}/all.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${log.filePath}/all/all.%d{yyyy-MM-dd}.log.zip</fileNamePattern> <maxHistory>${log.maxHistory}</maxHistory> <MaxFileSize>5M</MaxFileSize> </rollingPolicy> <encoder> <pattern>${log.pattern}</pattern> </encoder> </appender> <!--設置某一個包或者具體的某一個類的打印級別,name表明包名。會屏蔽rootLogger的appender--> <logger name="com.Logger" additivity="false"> <appender-ref ref="consoleAppender"/> <!--分級別分別輸出(debugAppender和infoAppender),屏蔽root的appender--> <appender-ref ref="debugAppender"/> <appender-ref ref="infoAppender"/> </logger> <!-- 打印debug級別日誌及以上級別日誌 --> <root level="DEBUG"> <!-- 控制檯輸出 --> <appender-ref ref="consoleAppender"/> <!-- 無論什麼包下的日誌都輸出到文件,全部級別的日誌分級別輸出--> <!--<appender-ref ref="ERROR"/>--> <!--<appender-ref ref="INFO"/>--> <!--<appender-ref ref="WARN"/>--> <!--<appender-ref ref="DEBUG"/>--> <!--<appender-ref ref="TRACE"/>--> </root> </configuration>
private static final Logger log= LoggerFactory.getLogger(this.class);
log.info("I am fine.");