前言
1、slf4j概述
2、pom.xml的日志依賴
3、application.yml的日志配置
4、logback.xml配置文件定義
5、logback.xml配置文件解析
5.1 定義日志的存儲路徑
5.2 定義日志的輸出格式
5.3 定義控制台輸出
5.4 定義日志相關參數
5.5 定義日志的輸出級別
6、測試日志輸出
7、小結
前言
日志,作為一個應用系統的重要部分,然而並不會在項目預研或需求設計階段就作為一個功能模塊單獨規划設計,但這絲毫不影響它在任何一個系統中的重要的地位。
為了保證服務的高可用,及時發現問題,迅速解決問題等訴求,所以生產環境一旦出現問題,預警系統就會通過郵件、短信甚至電話的方式實施多維轟炸模式,確保相關負責人不錯過每一個可能的bug。
預警系統判斷疑似bug大部分源於日志。比如某個微服務接口由於各種原因導致頻繁調用出錯,此時調用端會捕獲這樣的異常並打印ERROR級別的日志,當該錯誤日志達到一定次數出現的時候,就會觸發報警。
其次,在以往項目開發過程中,我們往往習慣性使用System.out.println()這個常用的打印輸出語句來顯示斷點信息或業務運行對象信息或控制台日志記錄,其實大量的使用System.out.println()在一定程度上會增加資源的消耗。Java日志框架眾多,常用的有java.util.logging,log4j,logback,commons-logging等等。而且SpringBoot 提供了一套日志系統,logback是最優的選擇。因此本文根據實際項目中使用slf4j 的logback來輸出日志,效率很高。
日志的重要性,不言而喻。
OK,接下來,本文主要總結一下項目中目前使用的SpringBoot集成slf4j日志配置。
1、slf4j概述
slf4j,即(Simple Logging Facade for Java,簡單門面日志)。它是對所有日志框架制定的一種規范、標准、接口,並不是一個框架的具體的實現,它只服務於各種各樣的日志系統。
slf4j提供了統一的記錄日志的接口,對不同日志系統的具體實現進行了抽象化,只要按照其提供的方法記錄即可,最終日志的格式、記錄級別、輸出方式等通過綁定具體的日志系統來實現。在項目中使用了slf4j記錄日志,並且綁定了log4j(pom.xml中配置了相應的jar包依賴),則日志會以log4j的風格輸出;后期需要改為以logback的風格輸出日志,只需要將jar包log4j替換成logback即可,根本不需要修改日志文件的代碼。
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--定義變量--> <springProperty scope="context" name="APP_NAME" source="spring.application.name"/> <springProperty scope="context" name="APP_PORT" source="server.port"/> <springProperty scope="context" name="LOG_FILE_PATH" source="app.logPath"/> <!-- <property name="LOCAL_TEST_FILE_PATH" value="${LOG_FILE_PATH}/${APP_NAME}/${APP_PORT}"/>--> <!-- 文件輸出格式 --> <property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%t] %logger{36}[%L] - %msg%n"/> <!--定義日志文件位置--> <property name="LOG_HOME" value="D:\demoworkspace\sunny_redis\log"/> <!--定義日志文件位置 獲取配置文件形式--> <!-- <property name="LOG_HOME" value="${LOG_FILE_PATH}/${APP_NAME}/${APP_PORT}"/>--> <!--springProfile 配置具體環境--> <!--開發環境--> <springProfile name="dev"> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${PATTERN}</pattern> </encoder> </appender> <!--日志輸出級別--> <root level="INFO"> <appender-ref ref="CONSOLE"/> </root> </springProfile> <!--測試環境--> <springProfile name="dev,test"> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <Prudent>ture</Prudent> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}-%i.log</FileNamePattern> <MaxHistory>10</MaxHistory> <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <MaxFileSize>20MB</MaxFileSize> </TimeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${PATTERN}</pattern> </layout> </appender> <!--日志輸出級別--> <root level="INFO"> <appender-ref ref="FILE"/> </root> </springProfile> </configuration>