工作中使用slf4j + log4j2 搭建了一个项目,log4j2 是使用的属性文件的方式来配置日志信息,但是项目运行后,未按照设想输出log日志。
具体的包名:使用slf4j(1.7.32,门面日志) + log4j2(2.17.2 具体日志)+ log4j-slf4j-impl(2.17.2 桥接器)配置
原因非常简单,log4j2 2.0版本后 跟 log4j 1 的属性配置文件参数已经发生改变。
我的文件中全部是是使用log4j. 开头约定的参数,所以在log4j2 项目中无效。
最后换成log4j2 对应的参数,就可以打印日志了。
这是log4j1版本对应的属性文件参数
### set log levels ###
log4j.rootLogger = debug , stdout , D, E
### output to the console ###
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss,SSS}[%F][%t] [%c{1}]-[%-p] %m%n
这个log4j2 对应的属性文件参数
#log4j2 自身的打印级别
status = ERROR
#log4j2 默认读取配置文件的时间,可以保证修改配置文件后不能重新启动项目,单位s 最小5s
monitorInterval = 30
#配置 全局的logger打印级别
rootLogger.level = debug
rootLogger.appenderRef.stdout.ref = console
#配置日志输出到什么地方,控制台,文件等
appender.console.name = console
appender.console.type = Console
appender.console.layout.type = PatternLayout
appender.console.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = info
因为log4j2一开始的版本并不支持属性文件的方式配置参数,是后续版本又新增的一种,所以查询的时候网上信息不多,而且有非常多的错误,最常见的错误就是标题写着的是log4j2配置文件,但是里面的属性都是log4j1的,踩了很多坑,建议log4j2直接使用.xml方式进行配置,方便快捷。
另外特别强调下:log4j2 2.14.1 及以下版本有安全漏洞,不建议使用了。
评论区