Logback是由log4j創始人設計的另外一個開源日誌組件,它分爲下面下個模塊:java
包括:
TRACE
、DEBUG
、INFO
、WARN
和ERROR
。git
TRACE
特別詳細的系統運行完成信息,業務代碼中,不要使用。(除非有特殊用意,不然請使用DEBUG
級別替代)github
DEBUG
debug
信息要有意義,最好有相關參數);DEBUG
信息INFO
系統運行信息spring
外部接口部分緩存
說明springboot
INFO
記錄入參;WARN
不該該出現可是不影響程序、當前請求正常運行的異常狀況:架構
業務異常的記錄,好比:當接口拋出業務異常時,應該記錄此異常。app
ERROR
影響到程序正常運行、當前請求正常運行的異常狀況:框架
SQLException
和除了業務異常以外的全部異常(RuntimeException
和Exception
)。不該該出現的狀況:
若是進行了拋出異常操做,請不要記錄ERROR
日誌,由最終處理方進行處理:異步
反例(不要這麼作):
try{ .... }catch(Exception ex){ String errorMessage=String.format("Error while reading information of user [%s]",userName); logger.error(errorMessage,ex); throw new UserServiceException(errorMessage,ex); }
SpringBoot
工程自帶logback
和slf4j
的依賴,因此重點放在編寫配置文件上,須要引入什麼依賴,日誌依賴衝突通通都不須要咱們管了;logback
框架會默認加載classpath
下命名爲logback-spring
或logback
的配置文件。ERROR
日誌和其餘日誌分開,而且不一樣級別的日誌根據時間段進行記錄存儲。logback-spring.xml
示例<?xml version="1.0" encoding="utf-8"?> <configuration> <!-- 屬性文件:在配置文件中找到對應的配置項 --> <springProperty scope="context" name="logPath" source="logging.path"/> <!-- 輸出到控制檯 --> <appender name="CONSOLE-LOG" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern> </layout> </appender> <!-- 獲取比info級別高(包括info級別)但除error級別的日誌 --> <appender name="INFO-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 指定過濾策略 --> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>DENY</onMatch> <onMismatch>ACCEPT</onMismatch> </filter> <encoder> <!-- 指定日誌輸出格式 --> <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern> </encoder> <!-- 指定收集策略:滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!-- 指定生成日誌保存地址 --> <fileNamePattern>${logPath}/info.%d.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <appender name="ERROR-LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!-- 指定過濾策略 --> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> <encoder> <!-- 指定日誌輸出格式 --> <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%C] [%t] [%L] [%-5p] %m%n</pattern> </encoder> <!-- 指定收集策略:滾動策略--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--指定生成日誌保存地址 --> <fileNamePattern>${logPath}/error.%d.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> </appender> <!-- 異步輸出 --> <appender name="ASYNC-INFO" class="ch.qos.logback.classic.AsyncAppender"> <!-- 不丟失日誌.默認的,若是隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 --> <queueSize>256</queueSize> <!-- 添加附加的appender,最多隻能添加一個 --> <appender-ref ref="INFO-LOG"/> </appender> <appender name="ASYNC-ERROR" class="ch.qos.logback.classic.AsyncAppender"> <!-- 不丟失日誌.默認的,若是隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 --> <discardingThreshold>0</discardingThreshold> <!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 --> <queueSize>256</queueSize> <!-- 添加附加的appender,最多隻能添加一個 --> <appender-ref ref="ERROR-LOG"/> </appender> <!-- 指定最基礎的日誌輸出級別 --> <root level="info"> <appender-ref ref="CONSOLE-LOG" /> <appender-ref ref="INFO-LOG" /> <appender-ref ref="ERROR-LOG" /> </root> </configuration>
項目配置文件中配置日誌輸出地址
logging: path: ./logs
<root>
標籤:指定最基礎的日誌輸出級別;
<appender-ref>
標籤,添加append
<appender>
標籤:指定日誌的收集策略
name
屬性指定appender
命名class
屬性指定輸出策略,一般有兩種,控制檯輸出和文件輸出,文件輸出就是將日誌進行一個持久化。ConsoleAppender
將日誌輸出到控制檯。<filter>
標籤:指定過濾策略
<level>
:指定過濾的類型。<encoder>
標籤:使用該標籤下的<pattern>
標籤指定日誌輸出格式。
<rollingPolicy>
標籤:指定收集策略,好比基於時間進行收集