參考Spring Boot官方文檔 日誌部分html
Spring Boot默認狀況下,當使用"Starters" 使用Logback輸出日誌
, 還包括適當的Logback路由, 確保其餘的日誌框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用java
Sping Boot文檔的 26.5 Custom Log Configuration 章節,說明了自定義日誌配置方法web
多樣的日誌系統能夠經過spring
loggin.config
配置指定配置文件依賴於開發者選擇的日誌框架. 這些對應的配置文件會被加載數據庫
日誌框架 | 配置文件 |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , logback.groovy |
Log4j2 | log4j2-spring.xml , log4j2.xml |
JDK(JAVA Util Logging) | logging.properties |
Log4j2爲什麼物就不介紹了. Log4j2官網apache
配置的方案 在官方文檔 77.2 Configure Log4j for Loggingjson
pom.xml
中去掉Logback, 引入log4j2app
<!-- 節選 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency>
使用xml格式配置文件, 無需添加額外的依賴庫.框架
使用 yaml/yml格式配置文件. 須要額外引入依賴庫dom
<!-- 解析yml配置 --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> </dependency>
使用 json 格式配置文件, 須要額外引入依賴庫
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
指定spring boot配置文件
application.yaml
文件配置以下
logging: config: classpath:log4j2.xml
如需瞭解Log4j2詳盡的配置, 可訪問官方文檔
大概介紹一下Log4j2的基本信息
日誌的Level分爲:
這裏介紹一下博主常常使用的一種日誌方式 RollingFileAppender
以一個具體的配置爲例
<?xml version="1.0" encoding="UTF-8" ?> <Configuration status="trace" strict="true" name="LogConfig"> <Properties> <Property name="filepath">/tmp/log4j2</Property> </Properties> <Appenders> <Console name="STDOUT" target="SYSTEM_OUT"> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> </Console> <RollingFile name="logService" fileName="${filepath}/logService.log" filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz"> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> <Policies> <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/> </Policies> </RollingFile> </Appenders> <Loggers> <Logger name="fileLogger" level="debug" additivity="false"> <AppenderRef ref="logService"/> <AppenderRef ref="STDOUT"/> </Logger> <Root level="trace"> <AppenderRef ref="STDOUT"/> </Root> </Loggers> </Configuration>
status
: Level枚舉型, 控制輸出Log4j事件信息, 默認 errorname
: 配置名稱strict
: 是否使用嚴格的XML格式. 推薦使用, 規範開發者的配置編寫, 不支持jsonp配置設置配置文件全局的參數變量. 用於減小自定義配置信息的重複編碼.
<Properties> <Property name="filepath">/tmp/log4j2</Property> </Properties>
配置下文中, 可使用 ${filepath}
來代替 /tmp/log4j2
Log4j2提供了豐富的Appender
項目中比較經常使用的是 ConsoleAppender
和 RollingFileAppender
.
接下來對上述的Appender配置參數的說明
<Appenders> <!-- ConsoleAppender --> <!-- name Appender名稱 --> <!-- target 枚舉型(SYSTEM_OUT, SYSTEM_ERR). 默認 SYSTEM_OUT --> <Console name="STDOUT" target="SYSTEM_OUT"> <!-- 輸出格式 詳細配置見下文 --> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> </Console> <!-- RollingFileAppender --> <!-- fileName 輸出的問題名稱, 使用絕對路徑確保日誌位置的正確性, 而且確保目錄有進程用戶可寫權限 --> <!-- filePattern 日誌回滾的文件命名規則 --> <RollingFile name="logService" fileName="${filepath}/logService.log" filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz"> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> <Policies> <!-- 按Cron定時任務回滾文件--> <!-- schedule Cron表達式 --> <!-- evaluateOnStartup (規則: 啓動時,檢查判斷目標文件最後的修改時間, 若是cron規則判斷該文件須要回滾,則直接回滾文件.) 是否開啓該規則操做 --> <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/> </Policies> </RollingFile> </Appenders>
Layout有多種格式輸出
項目中通常使用Pattern 按行輸出逐條信息, 配置以下:
<!-- 節選配置 --> <PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout>
%
+ char/word
表明一種輸出的信息或者格式
格式 | 輸出 |
---|---|
%d, %d{DEFAULT} | 2012-11-02 14:34:02,781 |
%d{UNIX} | 1351866842 |
%d{UNIX_MILLIS} | 1351866842781 |
%d{yyyy-MM-dd HH:mm:ss,SSS} | 2012-11-02 14:34:02,781 |
輸出調用的類名
%c{number} , 控制類型的長度
輸出等級 TRACE, DEBUG, INFO, WARN, ERROR, FATAL
%heighlight{xxx}
xxx將會帶有顏色樣式, 而且和Level相關, 通常用於debug調試信息使用
可添加文本樣式
根據操做系統的輸出不一樣的換行標識符用戶日誌換行, 最好別使用 \n
, \r\n
等換行符號
其餘還有不少標識符號, 參考 官方文檔
Root
元素, 不設置 Root
元素, 將會默認使用相似以下的配置<Root level="error"> <AppenderRef ref="Console" /> </Root>
Logger
<Loggers> <!-- name 必填且惟一 --> <!-- level 設置輸出最低級別 默認error --> <!-- additivity 是否在父Logger輸出, 默認 true --> <Logger name="fileLogger" level="debug" additivity="false"> <!-- 上文中定義的Appender name --> <AppenderRef ref="logService"/> <AppenderRef ref="STDOUT"/> </Logger> <Root level="ERROR"> <AppenderRef ref="STDOUT"/> </Root> </Loggers>
以demo爲例
package info.chiwm.log4j2.service; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.stereotype.Service; /** * @author chiwm@kuyumall.com * @ClassName: Log4j2ServiceImpl * @Description: * @date 2018/1/4 上午11:10 */ @Service public class Log4j2ServiceImpl implements Log4j2Service { // 使用LogManager獲取配置Logger private static Logger logger = LogManager.getLogger("fileLogger"); @Override public void info(String msg) { // 輸出日誌 // 特別注意 不要使用 `+` 去拼接信息, 這樣在控制輸出級別以後, 有些日誌操做不會打印, 可是它去操做了新字符串建立, 使用 `{}` 去代替 `+` logger.info("info {}", msg); } @Override public void error() { logger.error("error"); } @Override public void warn() { logger.warn("warn"); } @Override public void debug() { logger.debug("debug"); } @Override public void trace() { logger.trace("trace"); } }
前面的配置步驟,配置,使用步驟,大概描述了Log4j2的使用.
歡迎評論區指出錯誤或者探討相關的問題