Logback是由log4j創始人設計的另外一個開源日誌組件。目前主要有如下三個組件java
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"></timestamp>
<!-- 定義常量屬性 -->
<property name="name" value="recommend_web"></property>
<property name="CONSOLE_LOG_PATTERN" value="%-4relative [%thread] %-5level %logger{35} - %msg %n"></property>
<!-- 配置上下文名稱 -->
<contextName>${name}</contextName>
<!-- 輸出到控制檯 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!-- 格式化日誌內容 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern></pattern>
</encoder>
</appender>
<!-- 把日誌添加到文件 -->
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<!-- 被寫入的文件名,能夠是相對目錄,也能夠是絕對目錄,沒有默認值 -->
<file>F:\logs\test.log</file>
<!-- true-日誌追加到文件結尾,false-清空現存文件,默認爲true -->
<append>true</append>
<!-- 對日誌內容格式化 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
<!-- true-日誌安全的寫入文件,效率低,默認爲false -->
<prudent>false</prudent>
</appender>
<!-- 滾動記錄文件 -->
<appender name="rollingAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>F:\rollLog\logFile.log</file>
<!--
TimeBasedRollingPolicy</font>:根據時間制定滾動策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 歸檔文件格式 -->
<fileNamePattern>
logFile.%d{yyyy-MM-dd}.log
</fileNamePattern>
<!-- 歸檔文件最大數量 -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!--
SizeBasedTriggeringPolicy:根據文件制定滾動策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<!-- 活動文件大小,若是超過當前大小,則觸發滾動,默認爲10MB -->
<maxFileSize>5MB</maxFileSize>
</rollingPolicy>
<!--
FixedWindowRollingPolicy:根據固定窗口算法制定滾動策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<!-- 活動文件大小,若是超過當前大小,則觸發滾動,默認爲10MB -->
<minIndex>1</minIndex>
<maxIndex>3</maxIndex>
<!-- 歸檔文件格式,必須包含%i,表示當前文件索引 -->
<fileNamePattern>
logFile.%d{yyyy-MM-dd}.log
</fileNamePattern>
</rollingPolicy>
<!-- 告知 RollingFileAppender 什麼時候激活滾動,跟FixedWindowRollingPolicy搭配使用 -->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>5MB</maxFileSize>
</triggeringPolicy>
<!-- 設置大小,跟TimeBasedRollingPolicy搭配使用,表示按日期、文件大小記錄日誌,文件名引用%i表示索引 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<!-- 設置字符集 -->
<charset>UTF-8</charset>
</encoder>
<!-- 級別過濾器,根據日誌級別進行過濾 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 設置過濾級別 -->
<level>ERROR</level>
<!-- 用於配置符合過濾條件的操做 -->
<onMatch>ACCEPT</onMatch>
<!-- 用於配置不符合過濾條件的操做 -->
<onMismatch>DENY</onMismatch>
</filter>
<!-- 臨界值過濾器,過濾掉低於指定臨界值的日誌 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 設置過濾級別 -->
<level>ERROR</level>
</filter>
</appender>
<!-- 定義日誌文件異步輸出 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<!-- 不丟失日誌.默認的,若是隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
<discardingThreshold>0</discardingThreshold>
<!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 -->
<queueSize>512</queueSize>
<!-- 添加附加的appender,最多隻能添加一個 -->
<appender-ref ref="rollingAppender"/>
</appender>
<!--
用來設置某一個包或具體某一個類的日誌打印級別,能夠有多個logger配置
level:指定級別,不寫則繼承上級的級別
addtivity:是否向上級logger傳遞打印信息,默認爲true
-->
<logger name="com.log.controller.LogController" level="INFO" addtivity="false">
<!-- 輸出源,能夠有多個,引用appender標籤的name -->
<appender-ref ref="fileAppender"/>
</logger>
<!-- logger根元素,是全部logger元素的上級,只有一個level屬性,默認爲DEBUG -->
<root level="INFO">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>
複製代碼
Logback輸出日誌是從子節點開始,子節點若是有輸出源直接輸出,若是無,判斷配置的addtivity,是否像上級傳遞,便是否向root傳遞,傳遞則採用root的輸出源,不然不輸出日誌。
若是logger採用root的輸出源,則根root的level無關,好比:logger的level爲INFO,root的level爲ERROR,若是日誌打印爲info級別日誌,也同樣會打印出來,向上級傳遞只是使用root節點的輸出源。web
<!-- name表示當前的環境,能夠配置多個,好比test-測試 prod-生產 -->
<springProfile name="dev">
<logger name="com.log.controller.LogController" level="INFO" addtivity="false">
<appender-ref ref="fileAppender"/>
</logger>
<root level="INFO">
<appender-ref ref="consoleAppender"/>
</root>
<springProfile>
複製代碼