1. 什么是log4j
log4j是一个流行的Java日志框架,是由 Apache 的一个开源项目。它允许开发人员通过将日志语句插入应用程序代码中来记录应用程序运行时的事件。
log4j主要是由 Logger,Appender,Layout 组成,
Logger,日志记录器,控制日志的输出级别以及是否输出日志。 Appender,控制日志被写入的位置,例如控制台、文件等。 Layout,用于定义日志输出的格式。
2.log4j的日志级别
Log4j有六个日志级别,分别是:TRACE
、DEBUG
、INFO
、WARN
、ERROR
、FATAL
。 日志优先级为:TRACE<DEBUG<INFO<WARN<ERROR<FATAL
3. log4j配置
3.1依赖引入:pom.xml
+<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.26</version> </dependency> <!--log4j--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.36</version> </dependency>
3.2添加配置文件:src\main\resources\log4j.properties
log4j.rootCategory=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
第一行设置了根日志的级别为DEBUG,即只有DEBUG级别及以上的日志会被记录。同时,定义了一个名为"stdout"的附加器(appender)。
第二行定义了一个名为"stdout"的控制台附加器(ConsoleAppender),表示将日志输出到控制台。
第三行设置了"stdout"附加器的布局(layout)为PatternLayout,即使用PatternLayout来格式化日志输出。
第四行定义了PatternLayout的转换模式(ConversionPattern),其中%d表示输出日志的时间,%5p表示输出日志级别的名称,%t表示输出日志的线程名,%c表示输出日志的类名,%L表示输出日志的行号,%m表示输出日志的消息,%n表示换行。
3.2.1Appender 附加器
# 定义名为CONSOLE的appender(输出到控制台)
**log4j.appender.console=org.apache.log4j.ConsoleAppender**
# 定义名为file的appender(输出到文件中)
log4j.appender.file=org.apache.log4j.FileAppender ` log4j.appender.file.File=E:/workspace/logfile.txt ` log4j.appender.file.encoding=UTF-8`
# 定义名为rollingfile的appender(滚动的输出到文件中)
log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender log4j.appender.rollingfile.File=E:/workspace/logrollingfile.txt log4j.appender.rollingfile.encoding=UTF-8 log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10
3.2.3日志格式化器
# 自定义输出格式
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{2}:%L - %m%n
# 简单布局
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
一些自定义输出格式
4.测试
@Slf4j public class LogAnnotation { public static void main(String[] args) { log.debug("这是debug级别的日志"); log.info("这是info级别的日志"); log.warn("这是warn级别的日志"); log.error("这是error级别的日志"); } }
-
%d{ABSOLUTE}
:输出日志的时间,使用绝对时间格式(HH:mm:ss,SSS)。 -
%5p
:输出日志的级别,占5个字符的宽度,不足的地方使用空格填充。 -
%t
:输出日志的线程名。 -
%c{2}
:输出日志的类名(包含包名),只显示最后两级类名(不包含包名)。 -
:%L
:输出日志的行号。 -
-%m%n
:输出日志的消息和换行符。