如何为Log4J StatusLogger输出添加时间戳?
Log4J调试日志无时间戳问题解决记录
问题描述
已开启Log4J调试,但调试日志中没有时间戳。官方文档中的状态消息示例默认带有时间戳:
2011-11-23 17:08:00,769 DEBUG Generated plugins in 0.003374000 seconds
我的启动日志中,Log4J StatusLogger的输出无时间戳,相关日志片段如下:
*** /drives/x/logfiles/Tomcat9/catalina.2024-08-19.log *** 2024-08-19 11:10:38.486 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.85 ... 2024-08-19 11:10:38.518 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dlog4j2.debug=true ... *** /drives/x/logfiles/Tomcat9/tomcat9-stderr.2024-08-19.log *** 2024-08-19 11:10:54.158 INFO [org.apache.jasper.servlet.TldScanner scanJars] At least one JAR was scanned for TLDs yet contained no TLDs. ... DEBUG StatusLogger Using ShutdownCallbackRegistry class org.apache.catalina.core.util.DefaultShutdownCallbackRegistry TRACE StatusLogger Log4jLoggerFactory.getContext() found anchor class de.nexus.http.filter.SessionLoggingListener
尝试过程(2024-08-20 更新)
当前使用的Log4J相关JAR包:
$ find WEB-INF/lib/ | sort | grep -i log4j WEB-INF/lib/log4j-api-2.19.0.jar WEB-INF/lib/log4j-core-2.19.0.jar WEB-INF/lib/log4j-layout-template-json-2.19.0.jar WEB-INF/lib/log4j-slf4j2-impl-2.19.0.jar
尝试了以下SimpleLogger相关JVM参数,均无法为调试日志添加时间戳:
-Dlog4j.debug=true -Dlog4j2.debug=true -Dlog4j2.simplelogShowContextMap=true -Dlog4j2.simplelogShowlogname=true -Dlog4j2.simplelogShowShortLogname=false -Dlog4j2.simplelogShowdatetime=true -Dlog4j2.simplelogDateTimeFormat="yyyy-MM-dd HH:mm:ss.SSS zzz"
将log4j-api-2.19.0.jar替换为2.20.0.jar后问题依旧。
问题解决(2024-08-27 更新)
- 无效配置:
-Dlog4j2.simplelogDateTimeFormat="yyyy-MM-dd HH:mm:ss.SSS zzz" - 有效配置:
-Dlog4j2.statusLoggerDateFormat=yyyy-MM-dd HH:mm:ss.SSS
关键注意点
- 有效配置针对的是Status Logger,而非之前尝试的Simple Logger,二者配置参数不通用;
- 配置参数值不能带引号,否则输出的时间戳会包含引号。
个人看法
时间戳格式没有合理的默认值不太合理,Simple Logger和Status Logger都应该默认带有时间戳。
内容的提问来源于stack exchange,提问作者StackzOfZtuff
相关产品推荐
相关产品推荐

