如何配置Tomcat使Catalina.out日志始终显示完整时间戳?
解决Tomcat Catalina.out日志时间戳不一致问题
问题原因
catalina.out的日志来源分为两部分:
- Tomcat核心组件及应用通过日志框架(默认java.util.logging,或自定义Log4j)输出的日志
- JVM的System.out/System.err输出(通常是应用直接调用
System.out.println()等产生的)
两部分日志的时间戳格式配置不一致,就会出现有时显示完整时间、有时仅显示小时的情况。
解决方案
情况1:使用Tomcat默认的java.util.logging框架
- 打开Tomcat配置目录下的
conf/logging.properties文件 - 找到ConsoleHandler的相关配置,确保以下设置:
- 指定Formatter为
java.util.logging.SimpleFormatter(默认配置,若被修改则改回):java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter - 添加或修改SimpleFormatter的输出格式,强制输出完整时间戳:
# 格式说明:%1$td-%1$tb-%1$tY 对应日-月-年,%1$tT.%1$tL 对应时:分:秒.毫秒 java.util.logging.SimpleFormatter.format=%1$td-%1$tb-%1$tY %1$tT.%1$tL %4$s %2$s %5$s%6$s%n
- 指定Formatter为
- 保存文件后重启Tomcat,此时所有通过ConsoleHandler输出到catalina.out的日志都会带有完整时间戳。
情况2:使用Log4j(或Log4j2)作为日志框架
- 打开Log4j的配置文件(如
log4j.properties或log4j2.xml) - 找到对应输出到catalina.out的ConsoleAppender配置:
- 若用
log4j.properties,确保Layout的Pattern包含完整时间格式:log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout # %d{dd-MMM-yyyy HH:mm:ss.SSS} 为完整时间戳格式 log4j.appender.console.layout.ConversionPattern=%d{dd-MMM-yyyy HH:mm:ss.SSS} %p %c{1} - %m%n - 若用
log4j2.xml,则在Appender的PatternLayout中配置时间格式:<Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{dd-MMM-yyyy HH:mm:ss.SSS} %p %c{1} - %m%n"/> </Console> </Appenders>
- 若用
- 同时,确保应用中直接使用System.out/System.err的输出被Log4j捕获,避免无完整时间戳的日志混入。
额外注意点
若修改配置后仍有部分日志仅显示小时,检查是否是应用直接调用System.out/System.err输出且未被日志框架接管。可在应用中替换为日志框架API(如logger.info())输出,或通过Tomcat启动脚本添加JVM参数强制重定向:
在catalina.sh(Linux)或catalina.bat(Windows)中添加:
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
确保所有输出都通过Tomcat的日志系统处理。
内容的提问来源于stack exchange,提问作者Filip Machaj
相关产品推荐
相关产品推荐

