PS: 1、springboot默認使用的日誌框架是logback;
2、想使用spring擴展profile支持,要以logback-spring.xml命名,其他如property需要改爲springProperty
一、configuration (最外層)
-
scan
當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true。 -
scanPeriod:
設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。 -
debug:
當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。
<configuration scan="true" scanPeriod="60 seconds" debug="false">
</configuration>
二、contextName
每個logger都關聯到logger上下文,默認上下文名稱爲“default”。但可以使用contextName標籤設置成其他名字,用於區分不同應用程序的記錄。
三、property
用來定義變量值的標籤,property標籤有兩個屬性,name和value;其中name的值是變量的名稱,value的值時變量定義的值。通過property定義的值會被插入到logger上下文中。定義變量後,可以使“${name}”來使用變量
<property name="log.name" value="annoroad-log-demo"/>
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%logger{80}:%5line-%msg%n" />
<substitutionProperty name="log.base" value="./logs/${log.name}"/>
四、appender
-
定義
用於定義日誌如何輸出 -
屬性
2.1 name:用於定義該appender的名稱,該名稱需要在root或者logger的配置中使用
2.2 class:
用於指定實現該appender的實現類
-
類別
3.1 ConsoleAppender:把日誌添加到控制檯
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
3.2 FileAppender:
把日誌添加到文件
3.3 RollingFileAppender:
滾動記錄文件,先將日誌記錄到指定文件,當符合某個條件是,將日誌記錄到其他文件,是FileAppender的子類
<!-- 定義appender的名稱爲logfile,用於在logger後者root中進行引用-->
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 指定日誌打印級別閾值,只能比logger或者root中設置的高,低了無效,如果logger中level設置的info,這裏設置的warn,那麼只打印warn級別往上的日誌 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
<!-- 上面限制的是範圍,這裏可以針對單個進行處理,如下設置表示,只有info級別的日誌纔會被打印,其他的都會拒絕打印,當然前提是level或者上面的那個filter的級別設置的低於等於info纔有效 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>info</level>
<!-- 表示如果是info則通過可以打印-->
<onMatch>ACCEPT</onMatch>
<!-- 表示如果不是info則拒絕,不可以打印-->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 設置日誌文件的策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--設置文件名的生成規則,以及日誌文件存放的路徑-->
<!-- 這裏表示每天生成一個日誌文件,我們可以修改成每月生成一個,或者每小時生成一個 -->
<FileNamePattern>${log.base}/${log.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
<!-- 最多保留10天的日誌文件 -->
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<!-- 這裏用來設置日誌的打印格式 -->
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
五、logger
1.定義
用於指定什麼包或者類下的什麼類型的日誌怎麼輸出
2.屬性
2.1 name:
用於指定要使用該logger配置的包名或類名(全路徑)
2.2 additivity:
用來描述是否向上級logger傳遞打印信息。默認是true。
簡單說就是需不需要將要打印的信息也讓上級logger打印,如果爲true的話,日誌就會打印多遍。
<!-- 指定該logger控制test目錄下的日誌,並且不讓不向上級傳遞打印信息 -->
<logger name="com.annoroad.log.demo.test" additivity="false">
<!-- 指定只打印info以上的日誌 (TRACE、DEBUG、INFO、WARN、ERROR) -->
<level value="info"/>
<!-- 指定appender爲demo,可以指定多個appender-->
<appender-ref ref="demo" />
<!--<appender-ref ref="logfile" />-->
</logger>
六、root
一種特殊的logger,其實也是logger,如果沒有單獨制定logger,默認就是用root
<root>
<level value="INFO"/><!-- TRACE、DEBUG、INFO、WARN和ERROR -->
<appender-ref ref="stdout"/>
</root>
七、例子
<configuration>
<!-- 定義日誌文件名稱 -->
<property name="log.name" value="annoroad-log-demo"/>
<!-- 定義日誌格式 -->
<property name="log.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS}[%-5level]%logger{80}:%5line-%msg%n"/>
<!-- 定義日誌存放目錄-->
<substitutionProperty name="log.base" value="./logs/${log.name}"/>
<!-- 控制檯輸出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 控制檯輸出,限制level等級大於warn的纔會輸出 -->
<appender name="stdout2" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>warn</level>
</filter>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 輸出到文件,一天換一個日誌文件,只輸出warn級別的日誌,其他級別的日誌都拒絕輸出,日誌文件最多存10天 -->
<appender name="logfile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/${log.name}.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 輸出到文件,一天換一個日誌文件,只輸出info級別以上的日誌信息,但是不輸出warn級別的日誌,日誌文件最多存10天 -->
<appender name="logfile2" class="ch.qos.logback.core.rolling.RollingFileAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>info</level>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>warn</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>${log.base}/${log.name}2.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>10</MaxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!--
對於test文件夾下的日誌輸出:
trace級別以上的輸出到控制檯,
warn級別的日誌輸出到annoroad-log-demo.日期.log文件,
info級別以上,不包括warn級別的日誌輸出到annoroad-log-demo2.日期.log文件,
並且不向上級logger傳遞打印信息
-->
<logger name="com.annoroad.log.demo.test" additivity="false">
<level value="trace"/>
<appender-ref ref="stdout" />
<appender-ref ref="logfile" />
<appender-ref ref="logfile2" />
</logger>
<!--
對於test2文件夾下的日誌,warn級別以上的日誌輸出的控制檯,warn以下日誌不輸出,並且不向上級logger傳遞打印信息
-->
<logger name="com.annoroad.log.demo.test2" additivity="false">
<level value="info"/>
<appender-ref ref="stdout2" />
</logger>
<!--
對於starter下面的日誌,debug級別以上的控制檯輸出,並且輸出兩遍,因爲默認向上級logger傳遞打印信息,所以root也會進行打印
-->
<logger name="com.annoroad.springboot.starter">
<level value="debug"/>
<appender-ref ref="stdout"/>
</logger>
<!--
其它沒有具體設置的都按此設置進行輸出
-->
<root>
<level value="INFO"/>
<appender-ref ref="stdout"/>
</root>
</configuration>