Log4j&Log4j2 框架 知識點總結

前言

最近重新看了下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>
    • Log4jLog4j.appender.R.MaxFileSize

Others 個人總結


Others-官方文件


Others-優秀好文

  • 最詳細的Log4j總結
  • Java日誌終極指南
  • 混亂的 Java 日誌體系
  • 爲什麼要使用SLF4J而不是Log4J
  • 聊一聊log4j2配置文件log4j2.xml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章