Tomcat 9中如何捕获System.out.println输出并写入日志文件?
核心结论
默认配置下,System.out.println 输出的内容不会写入带日期后缀的catalina.[YYYY-MM-DD].log文件,默认会被重定向到同目录下的catalina.out无后缀纯文本文件,你可以先检查该文件是否存在对应输出。
配置修改方案
- 如果你需要将System.out输出也写入带日期的catalina日志文件,修改Tomcat安装目录下的
conf/logging.properties文件:- 确保
java.util.logging.ConsoleHandler.level配置值不低于INFO(System.out默认对应INFO级别) - 确认
.handlers配置项同时包含1catalina.org.apache.juli.FileHandler和java.util.logging.ConsoleHandler - 新增如下两项配置:
修改后重启Tomcat生效。org.apache.catalina.startup.Catalina.handlers = 1catalina.org.apache.juli.FileHandler 1catalina.org.apache.juli.FileHandler.redirectStdout = true - 确保
- 若你的Tomcat通过systemd服务管理,大部分发行版默认会将Tomcat的标准输出重定向到journald日志体系,你可以直接执行
journalctl -u tomcat9.service查看对应输出;如果需要持久化到本地文件,修改systemd的Tomcat服务配置文件,新增StandardOutput=append:/var/log/tomcat/catalina.out配置后重载服务即可。 - 若要在应用层面统一捕获所有System.out输出,可以在项目启动类的初始化逻辑中添加输出流重定向代码,将System.out转发到项目使用的
java.util.logging.Logger体系,即可让所有打印内容统一走现有日志规则输出到对应文件。
补充排查提示
如果完成配置后仍找不到对应输出,优先确认第三方API的日志开关已按照要求正确开启,部分第三方组件的打印逻辑会在开关未激活时直接跳过,不会执行
System.out.println调用。
内容的提问来源于stack exchange,提问作者Flarosa
相关产品推荐
相关产品推荐

