前言
最近重新看了下Log4j & Log4j2. 將知識點總結記錄.
正文
Log4j 知識要點
-
Log4j 4大組件
- Logger - 日誌輸出
- Appender - 附着器
- Layout - 佈局
-
Appender 種類
- Console 控制檯輸出
- File 文件輸出
- RollingFile 文件輸出(滾動文件輸出)
- 注意: File文件輸出和RollingFile文件輸出的區別?(RollingFile帶滾動機制?)
-
Layout 種類
- PatternLayout
- HTMLLayout
- SimpleLayout
-
PatternLayout
- %d : (date)日期. (%d {hh:MM:ss. SSSS})
- %c: (class)所在類
- %t: (thread)所在線程.
- %l: (location)所在位置. (類-線程-代碼行數 Testlog4.main(TestLog4.java:10))
- %m%n: 換行符.
- %p: (priority)優先級.
-
日誌優先級類型
- DEBUG: 調試級別.
- INFO: 消息級別.
- WARN: 警告級別.
- ERROR: 錯誤級別.
- FATAL: 嚴重錯誤級別.
- OFF: 停止級別.
- ALL: 所有優先級.
- TRACE: 跟蹤級別(比Debug級別更低)
注: 前4種爲常用優先級別. 後面幾種優先級不是特別常用.
Log4j2 知識要點
Log4j2配置文件一般爲xml或者jsn. 以xml配置文件爲例子.
<Configuration>
標籤<Appenders>
標籤<Console>
標籤<File>
標籤<File name="FileLog" fileName="log/test.log" append="false">
<RollingFile>
標籤<PatternLayout>
標籤<PatternLayout pattern="[%d{HH:mm:ss.SSSS}[%p] - %L %m%n]/"/>
<ThresholdFilter>
標籤<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<Policies>
策略標籤<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy Size="100MB"/>
<Loggers>
標籤<Logger>
標籤<logger name="org.springframework" level="INFO">
<Appender-ref>
標籤<Appender-ref ref="Console"/><Appender-ref ref="RollingFile"/>
相關實戰
Log4j
- Maven導入相關包 log4j-1.2.17.jar
<dependency>
<artifactId>log4j</artifactId>
<groupId>log4j</groupId>
<version>1.2.17</version>
</dependency>
- 配置文件 & 默認配置文件 log4j.properties
### root logger
log4j.rootLogger = WARN, Console, R
#first commit
#log4j.rootLogger = DEBUG, Console, R
### console appender
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] [%L] - %m %n
### file appender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=helloworld.log
log4j.appender.R.MaxFileSize=50MB
log4j.appender.R.MaxBackupIndex=30
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d [%t] %-5p [%c] [%L] -%m %n
### details
log4j.appender.com.yanxml.arsenal.java=INFO
log4j.appender.com.yanxml.arsenal.java.log4j.simple=WARN
- public static final Logger logger = Logger.getLogger(Test.class)
- 輸出 logger.info(“”); / logger.debug(“debug”):
- 結果
2020-06-14 21:24:07,298 [main] WARN [com.yanxml.arsenal.java.log4j.simple.SimpleLog4jDemo] [12] - [WARN] INFO
2020-06-14 21:24:07,304 [main] ERROR [com.yanxml.arsenal.java.log4j.simple.SimpleLog4jDemo] [13] - [ERROR] INFO
2020-06-14 21:24:07,304 [main] FATAL [com.yanxml.arsenal.java.log4j.simple.SimpleLog4jDemo] [14] - [FATAL] INFO
Log4j-SpringBoot
Log4j2
- Maven導入相關包
- 配置文件 log4j2.xml ( )
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN" monitorInterval="30">
<appenders>
<console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss.SSSS}][%p]-%l-%m%n"/>
</console>
<!-- File 與 RollingFile配置的區別 ?-->
<File name="FileLog" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSSS} %-5level %class{36} %L %M -%msg%xEx%n" />
</File>
<RollingFile name="RollingFile" filename="${sys:user.home}/logs/rollingfile.log"
filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/rolling-%d{yyyy-MM-dd}-%i.log">
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="[%d{HH:mm:ss.SSSS}[%p] - %L %m%n]/"/>
<Policies>
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy Size="100MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<logger name="org.springframework" level="INFO">
<Appender-ref ref="Console"/>
<Appender-ref ref="RollingFile"/>
</logger>
<logger name="org.mybatis" level="INFO"/>
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFile"/>
</root>
</loggers>
</configuration>
- public static final Logger logger = LoggerManager.getLogger(Test.class)
- 輸出 logger.info(“”); / logger.debug(“debug”):
- 輸出結果
//[11:43:16.0509][TRACE]-com.yanxml.arsenal.java.log4j2.simple.Log4j2Demo.main(Log4j2Demo.java:10)-TRACE
//[11:43:16.0510][DEBUG]-com.yanxml.arsenal.java.log4j2.simple.Log4j2Demo.main(Log4j2Demo.java:11)-DEBUG
//[11:43:16.0511][INFO]-com.yanxml.arsenal.java.log4j2.simple.Log4j2Demo.main(Log4j2Demo.java:12)-INFO
//[11:43:16.0511][WARN]-com.yanxml.arsenal.java.log4j2.simple.Log4j2Demo.main(Log4j2Demo.java:13)-WARN
//[11:43:16.0511][ERROR]-com.yanxml.arsenal.java.log4j2.simple.Log4j2Demo.main(Log4j2Demo.java:14)-ERROR
//[11:43:16.0512][FATAL]-com.yanxml.arsenal.java.log4j2.simple.Log4j2Demo.main(Log4j2Demo.java:15)-FATAL
其餘實戰內容
其餘Log4j實戰作用
- Info Warn Error 分別記錄在不同的日誌文件內(
Log4j2的<thresholdFilter>標籤 加3個<RollingFileAppender>
實現.) - 敏感字符串替換
- 文件按照時間 / 大小創建新的文件 & 分割
Log4j2
的<TimeBasedTriggeringPolicy>
和Log4j2
的<SizeBasedTriggeringPolicy>
Log4j
的Log4j.appender.R.MaxFileSize
Others 個人總結
Others-官方文件
Others-優秀好文
- 最詳細的Log4j總結
- Java日誌終極指南
- 混亂的 Java 日誌體系
- 爲什麼要使用SLF4J而不是Log4J
- 聊一聊log4j2配置文件log4j2.xml