Logback常用配置詳解
logback是一套日誌框架,由log4j的優化版,由同一個作者開發,在速度和效能上都超過其他日誌框架,再結合slf4j,已成為當前最流行的日誌框架。
Logback最常用就是在classpath定義一個lockback.xml配置檔案,從而對日誌進行配置輸出。
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<contextName>logback</contextName>
<property name="log.path" value="F:\\logback.log" />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter" >
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>
<appender name="file"
class ="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>
<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
<logger name="com.example.logback" level="warn" />
</configuration>
上面就是一個常用的日誌配置模版,下面就從跟節點來解析每個節點
根節點configuration,有以下屬性
a. scan,當此屬性設定為true時,配置檔案如果發生改變,將會被重新載入,預設值為true。
b. scanPeriod,設定監測配置檔案是否有修改的時間間隔,如果沒有給出時間單位,預設單位是毫秒。當scan為true時,此屬性生效。預設的時間間隔為1分鐘。
c. debug,當此屬性設定為true時,將打印出logback內部日誌資訊,實時檢視logback執行狀態。預設值為false。
contextName ,設定日誌上下文名稱,可以通過%contextName來列印日誌上下文名稱
property可以用來設定變數,可以通過${name}來訪問,有以下的屬性
a. name,用於${name}訪問的key
b. value,用於${name}訪問的value
c. file ,用於指定配置檔案的路徑,他的作用在於,如果你有多個配置資訊的話,可以直接寫在配置檔案中,然後通過file引入
<property file="src/main/java/chapters/configuration/variables.properties" />
variables.properties如下
log.path=F:\\demo log.name=mylog.log
然後就直接通過${log.path}就可以訪問其值
d.resource作用和file一樣,但是,它是可以直接從classpath路徑下引入配置檔案
<property resource="resource.properties" />
appender格式化日誌輸出節點,有倆個屬性name和class,class用來指定哪種輸出策略,常用就是控制檯輸出策略和檔案輸出策略。appender有以下子節點:
a. filter,日誌輸出攔截器,可以自定義攔截器也可以用系統一些定義好的攔截器
/** * 日誌輸出攔截器 * @author liuxg * @date 2016年4月28日 下午3:36:23 */ public class MyFilter extends Filter<ILoggingEvent> { @Override public FilterReply decide(ILoggingEvent event) { if (event.getMessage().contains("sample")) { return FilterReply.ACCEPT; //允許輸入串 } else { return FilterReply.DENY; //不允許輸出 } } }
它可以提供最大的自定義輸出,如果需要用到系統定義的攔截器,例如我們用ThresholdFilter來過濾掉ERROR級別以下的日誌不輸出到檔案中
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter>
b. encoder和pattern節點組合用於具體輸出的日誌格式
c. file節點用來指明日誌檔案的輸出位置,可以是絕對路徑也可以是相對路徑
d. rollingPolicy日誌回滾策略,在這裡我們用了TimeBasedRollingPolicy,基於時間的回滾策略,有以下子節點
fileNamePattern,必要節點,可以用來設定指定時間的日誌歸檔,例如我們上面的例子是每天將日誌歸檔成一個zip包
maxHistory ,可選節點,控制保留的歸檔檔案的最大數量,超出數量就刪除舊檔案,,例如設定為30的話,則30天之後,舊的日誌就會被刪除
totalSizeCap,可選節點,用來指定日誌檔案的上限大小,例如設定為3GB的話,那麼到了這個值,就會刪除舊的日誌
除了用TimeBasedRollingPolicy策略,我們還可以用SizeAndTimeBasedRollingPolicy,配置子節點的maxFileSize來指定單個日誌檔案的大小
<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>mylog.txt</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 每天一歸檔 --> <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <!-- 單個日誌檔案最多 100MB, 60天的日誌週期,最大不能超過20GB --> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%msg%n</pattern> </encoder> </appender>
root節點,必選節點,用來指定最基礎的日誌輸出級別,他有倆個自己點可以用來應用appender,格式化日誌輸出
<root level="debug"> <appender-ref ref="console" /> <appender-ref ref="file" /> </root>
logger節點,可選節點,用來具體指明包的日誌輸出級別,它將會覆蓋root的輸出級別
<logger name="com.example.logback" level="warn" />