前言
最近重新看了下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