Log4J介绍(Logger、Level、Appender、Layout、Threshold) 作者:马育民 • 2021-12-24 20:25 • 阅读:10371 # 介绍 Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。 官方网址: http://logging.apache.org/log4j/1.2/ ### 停止更新 从 [maven中央仓库](https://mvnrepository.com/artifact/log4j/log4j "maven中央仓库") 看,log4j最后一个版本是 **2012年发布的** `1.2.17` 版本 已经很久没更新了,apache 开发了 **log4j2**,**log4j2 替代了 log4j** # 三大组件 - Logger:日志记录器,负责收集处理日志记录 (如何处理日志) - Appender:日志输出目的地,负责日志的输出 (输出到什么 地方) - Layout:日志格式化,负责对输出的日志格式化(以什么形式展现) **三者关系:** 一个 `Logger` 可以对应多个 `Appender`,一个 `Appender` 只能对应一个 `Layout`。 # Logger logger可以有选择的启动和禁用日志的输出,我们经常会在各种框架中看到如: ``` private static final Logger log = LoggerFactory.getLogger(XX.class); ``` log就代表了一个Logger实例,他的name就是类“XX”的full quailied name(类的全限定名),这个log就可以指定多个appender和layout。Logger的名字大小写敏感,其命名有继承机制:例如:name为org.apache.commons的logger会继承name为org.apache的logger。 Log4J中有一个特殊的logger叫做“root”,他是所有logger的根,也就意味着其他所有的logger都会直接或者间接地继承自root。 # Level https://www.malaoshi.top/show_1IX2JNRVMqe6.html # Appender Appender可以控制日志的输出的目的地,一个输出源就叫一个Appender,appender的类别有: - Console(控制台) - File(文件) - JDBC、JMS等等 logger可以通过配置文件指定 ### 常用的appender有: - **org.apache.log4j.ConsoleAppender**(控制台) - org.apache.log4j.FileAppender(文件) - **org.apache.log4j.DailyRollingFileAppender**(每天产生一个日志文件) - **org.apache.log4j.RollingFileAppender**((文件大小到达指定尺寸的时候产生一个新的文件) - org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) # Layout 使用指定的Layout来展示(格式化)日志,常见的Layout有: - org.apache.log4j.HTMLLayout(以HTML表格形式布局) - **org.apache.log4j.PatternLayout**(可以灵活地指定布局模式) - org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串) - org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息),更多 # 配置 log4j的配置文件名称为:`log4j.properties` ### 配置 root Logger ``` log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , … ``` **解释:** `appenderName1` 自定义名字 ##### 例子: ``` log4j.rootLogger = DEBUG , stdout ,file ``` ### 配置日志信息输出目的地(Appender) ``` log4j.appender.stdout=org.apache.log4j.ConsoleAppender ``` **解释:** `stdout` 是 `log4j.rootLogger` 自定义的名字 ### 配置日志信息的格式(Layout) ``` log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n ``` # 例子 ### 输出到控制台 ``` log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out #默认就是System.out,另外一个值是System.error log4j.appender.stdout.layout = org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n ``` ### Threshold 配置 `rootLogger` 设置日志级别为 `DEBUG`,`Threshold` 设置日志级别为 `INFO`,那么该配置以 `Threshold` 日志级别为准,只输出 `INFO` 以上(`INFO`、`WARN`、`ERROR`、`FATAL`)的信息到文件中去,而 `DEBUG` 以下的信息忽略 **关键:** `Threshold` 级别 **不能** 比 `rootLogger` 低 ``` log4j.rootLogger = DEBUG , stdout ,file log4j.appender.file.Threshold = INFO ``` ### 输出到文件 ``` log4j.appender.file = org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File = logs/log.log log4j.appender.file.Append = true #默认就是true,系统启动时追加至文件中,否则会覆盖原有内容 log4j.appender.file.Threshold = INFO log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ``` # 配置日志信息的格式(Layout) ``` log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.optionN = valueN ``` ### 例子 ``` log4j.appender.file.layout = org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n ``` ### ConversionPattern参数 https://www.malaoshi.top/show_1IX2T16HSwpf.html 原文出处:http://malaoshi.top/show_1IX2T1GIXNEs.html