Spring Boot默認狀況下,當使用"Starters" 使用Logback輸出日誌
, 還包括適當的Logback路由, 確保其餘的日誌框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用web
Sping Boot文檔的 26.5 Custom Log Configuration 章節,說明了自定義日誌配置方法spring
多樣的日誌系統能夠經過數據庫
添加適當的日誌框架庫到classpath
適當的配置配置文件加入到classpath的根目錄 或者 其餘的本地目錄, 使用Spring配置 loggin.config 配置指定配置文件
依賴於開發者選擇的日誌框架. 這些對應的配置文件會被加載apache
日誌框架配置文件Logbacklogback-spring.xml,logback-spring.groovy,logback.xml,logback.groovyLog4j2log4j2-spring.xml,log4j2.xmlJDK(JAVA Util Logging)logging.propertiesjson
引入Log4j2日誌框架
Log4j2爲什麼物就不介紹了. Log4j2官網
配置的方案 在官方文檔 77.2 Configure Log4j for Loggingapp
pom.xml中去掉Logback, 引入log4j2框架
<!-- 節選 --> <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>
2.1 log4j2.xml
使用xml格式配置文件, 無需添加額外的依賴庫.dom
2.2 log4j2.yaml / log4j2.yml
使用 yaml/yml格式配置文件. 須要額外引入依賴庫異步
<!-- 解析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>
2.3 log4j2.json
使用 json 格式配置文件, 須要額外引入依賴庫socket
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
指定spring boot配置文件
application.yaml文件配置以下
logging: config: classpath:log4j2.xml
Log4j2日誌配置
如需瞭解Log4j2詳盡的配置, 可訪問官方文檔
概述
大概介紹一下Log4j2的基本信息
日誌的Level分爲:
trace (追蹤)
debug (調試)
info (信息)
warn (警告)
error (錯誤)
fatal (嚴重錯誤)
這裏介紹一下博主常常使用的一種日誌方式 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事件信息, 默認 error
name: 配置名稱
strict: 是否使用嚴格的XML格式. 推薦使用, 規範開發者的配置編寫, 不支持jsonp配置
... 其餘幾個配置能夠參考官方文檔
設置配置文件全局的參數變量. 用於減小自定義配置信息的重複編碼.
<Properties> <Property name="filepath">/tmp/log4j2</Property> </Properties>
配置下文中, 可使用 ${filepath} 來代替 /tmp/log4j2
Log4j2提供了豐富的Appender
AsyncAppender 設置appender異步方式輸出日誌
CassandraAppender 輸出至Cassandra存儲
ConsoleAppender 輸出控制檯
FailoverAppender 設置appender錯誤重試
FileAppender 輸出至文件
FlumeAppender 輸出至Flume
JDBCAppender 輸出至JDBC鏈接的關係型數據庫表
JMS Appender 輸出至消息服務
JPAAppender 輸出至使用JPA鏈接的關係行數據庫
HttpAppender 輸出至Http Service
KafkaAppender 輸出至Kafka
MemoryMappedFileAppender 輸出至內存
NoSQLAppender 輸出至NoSQL數據庫
OutputStreamAppender File/Socket類型的Appender
RandomAccessFileAppender 性能是FileAppder的0.2-2倍
RollingFileAppender 輸出至文件, 文件能按照規則打包文件
RollingRandomAccessFileAppender 同上
SMTPAppender 郵件形式輸出
SocketAppender socket方式發送日誌
項目中比較經常使用的是 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>
3.2 日誌輸出規則 Layouts
Layout有多種格式輸出
....
項目中通常使用Pattern 按行輸出逐條信息, 配置以下:
<!-- 節選配置 -->
<PatternLayout> <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern> </PatternLayout> % + char/word 表明一種輸出的信息或者格式
時間 %d / %date
格式輸出%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 / %logger
輸出調用的類名
%c{number} , 控制類型的長度
等級 %level
輸出等級 TRACE, DEBUG, INFO, WARN, ERROR, FATAL
顏色格式 %highlight
%heighlight{xxx}
xxx將會帶有顏色樣式, 而且和Level相關, 通常用於debug調試信息使用
日誌內容 %m / %msg / %message
可添加文本樣式
換行 %n
根據操做系統的輸出不一樣的換行標識符用戶日誌換行, 最好別使用 n, rn 等換行符號
其餘還有不少標識符號, 參考 官方文檔
必須包含一個 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>
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的使用.
歡迎評論區指出錯誤或者探討相關的問題
更多精彩文章,關注公衆號【ToBeTopJavaer】,更有以下數萬元精品vip資源免費等你來拿!!!