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
©️2020 CSDN 皮肤主题: Age of Ai 设计师:meimeiellie 返回首页