javascript
Springboot使用Log4j2的配置详解
Springboot使用Log4j2的配置
- 日志框架的對比和選擇
- 一、依賴配置(pom文件)
- 二、log4j2.xml文件的配置
- 三、Log4j2.xml配置文件核心概念解析
- 1、全局Property
- 2、Appender(**日志輸出源**)
- 3、日志記錄的輸出格式PatternLayout
- 4、Loggers:日志器
- 1)、Root Logger
- 2)、 其他Logger
- 四、異步日志
- 引用:
日志框架的對比和選擇
當前比較流行的日志框架有slf4j、log4j、logback、log4j2
- 日志接口(slf4j)
slf4j是對所有日志框架制定的一種規范、標準、接口,并不是一個框架的具體的實現,因為接口并不能獨立使用,需要和具體的日志框架實現配合使用(如log4j、logback)
- 日志實現(log4j、logback、log4j2)
log4j是apache實現的一個開源日志組件
logback同樣是由log4j的作者設計完成的,擁有更好的特性,用來取代log4j的一個日志框架,是slf4j的原生實現,springboot默認的日志組件就是使用的logback
Log4j2是log4j 1.x的大幅度改進和汲取了logback許多優秀的設計,性能當前是最好的,官網說明如下:
大致意思就是在多線程環境下比log4j 1和logback有了大幅提升,另外在異步日志方面,比logback等提升了18倍。所以,這里決定使用Log4j2作為主要的日志處理框架。
一、依賴配置(pom文件)
由于springboot自帶了logback的日志配置,因此如果要使用log4j2,則需要將springboot的starter中的logback配置排除掉:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions> </dependency>然后重新添加log4j2的依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId> </dependency>二、log4j2.xml文件的配置
需要在項目的資源根路徑(src/main/resources)創建log4j2.xml文件
文件內容大致如下:
三、Log4j2.xml配置文件核心概念解析
log4j2.xml配置文件主要參數配置如下:
- Configuration:為根節點,有status和monitorInterval等多個屬性
- status的值有 “trace”, “debug”, “info”, “warn”, “error” ,“fatal”,用于控制log4j2日志框架本身的日志級別,如果將stratus設置為較低的級別就會看到很多關于log4j2本身的日志,如加載log4j2配置文件的路徑等信息
- monitorInterval,含義是每隔多少秒重新讀取配置文件,可以不重啟應用的情況下修改配置
1、全局Property
這里可以設置全局的參數,在后面的輸出源或者Logger日志器中使用,使用的時候,需要使用${參數名稱}來使用,例如以下:
fileName="${LOG_HOME}/${INFO_FILE_NAME}.log其中的${LOG_HOME}就是引用了上面的property定義的參數
2、Appender(日志輸出源)
官方給出的定義如下:
Appender就是日志輸出源,就是日志實際輸出的文件的,log4j2支持的輸出源有很多,有控制臺Console、文件File、RollingRandomAccessFile、MongoDB、Flume 等:
- Console:控制臺輸出源是將日志打印到控制臺上,開發的時候一般都會配置,以便調試
- File:文件輸出源,用于將日志寫入到指定的文件,需要配置輸入到哪個位置(例如:D:/logs/mylog.log)
- RollingRandomAccessFile: 該輸出源也是寫入到文件,不同的是比File更加強大,可以指定當文件達到一定大小(如20MB)時,另起一個文件繼續寫入日志,另起一個文件就涉及到新文件的名字命名規則,因此需要配置文件命名規則,這種方式更加實用,因為你不可能一直往一個文件中寫,如果一直寫,文件過大,打開就會卡死,也不便于查找日志。
- fileName 指定當前日志文件的位置和文件名稱
- filePattern 指定當發生Rolling時,文件的轉移和重命名規則
- SizeBasedTriggeringPolicy 指定當文件體積大于size指定的值時,觸發Rolling
- DefaultRolloverStrategy 指定最多保存的文件個數
- TimeBasedTriggeringPolicy
這個配置需要和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-dd
HH-mm}-%i,最小的時間粒度是mm,即分鐘 - TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1分鐘生成一個新文件。如果改成%d{yyyy-MM-dd
HH},最小粒度為小時,則每一個小時生成一個文件 - NoSql:MongoDb, 輸出到MongDb數據庫中
- Flume:輸出到Apache
Flume(Flume是Cloudera提供的一個高可用的,高可靠的,分布式的海量日志采集、聚合和傳輸的系統,Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力。) - Async:異步,需要通過AppenderRef來指定要對哪種輸出源進行異步(一般用于配置RollingRandomAccessFile)
使用說明:
常用的是 RollingFile Appender或者RollingRandomAccessFile,它們是一種io 輸出流(OutputStreamAppender ),將日志事件寫到filePattern指定的路徑的fileName名稱的日志文件中,日志的滾動和歸檔的規則需要根據滾動策略的配置。主要策略為TriggeringPolicy(觸發策略) 策略和 RolloverPolicy(覆蓋策略),這兩個策略可以聯合起來使用。
如需要定義日志根據日期歸檔,同時還要根據每個日志文件大小達到一定的值,則日志切割成多個日志文件,例如,需要日志按照日期和日志大小來切割,則需要使用TimeBasedTriggeringPolicy 和 SizeBasedTriggeringPolicy 。TimeBasedTriggeringPolicy 這個配置需要和filePattern結合使用,注意filePattern中配置的文件重命名規則是${FILE_NAME}-%d{yyyy-MM-dd}-%i,最小的時間粒度是dd,即天,TimeBasedTriggeringPolicy指定的size是1,結合起來就是每1天生成一個新文件。如果改成%d{yyyy-MM-dd HH},最小粒度為小時,則每一個小時生成一個文件,SizeBasedTriggeringPolicy 指定當文件體積大于size指定的值時,觸發Rolling,以上的配置配置的是200MB,總體結合起來就是每天生成一個日志問價,如果日志文件大小超過200MB,則會分隔成_1,_2…等后綴的日志文件。
3、日志記錄的輸出格式PatternLayout
日志文件里面每一行日志數據的格式都需要定義指定的樣式,例如:
<PatternLayoutpattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n"/>則日志會輸出格式如下的日志:
詳細參數解析如下:
%d{HH:mm:ss.SSS} 表示輸出到毫秒的時間
%t 輸出當前線程名稱
%-5level 輸出日志級別,-5表示左對齊并且固定輸出5個字符,如果不足在右邊補0
%logger 輸出logger名稱,因為Root Logger沒有名稱,所以沒有輸出
%msg 日志文本
%n 換行
其他常用的占位符有:
%F 輸出所在的類文件名,如Client.java
%L 輸出行號
%M 輸出所在方法名
%l 輸出語句所在的行數, 包括類名、方法名、文件名、行數
4、Loggers:日志器
日志級別從低到高分為TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果設置為WARN,則低于WARN的信息都不會輸出。對于Loggers中level的定義同樣適用。
1)、Root Logger
配置如下:
<Root level="info"><AppenderRef ref="info-log" /><AppenderRef ref="Console" /></Root>配置了logger的日志級別,以及引用的輸出源
2)、 其他Logger
除了可以聲明root logger之外,還可以聲明自定義的logger,并指定引用哪個輸出源:
<Logger name="request" level="info"additivity="false"><AppenderRef ref="request-log"/></Logger><Logger name="org.springframework"><AppenderRef ref="Console" /></Logger>四、異步日志
由于項目暫時用不上異步日志,還未深入了解,待后面了解了再補充
引用:
[1] http://www.masterspringboot.com/configuration/logging/configuring-log4j2-in-spring-boot-applications
[2] http://logging.apache.org/log4j/2.x/
[3] https://blog.csdn.net/weixin_32265569/article/details/110723441
總結
以上是生活随笔為你收集整理的Springboot使用Log4j2的配置详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat server.xml文件的
- 下一篇: Springboot 集成Springc