Apache Tomcat 9.0.75 stdout日志删除或轮转方案求助
解决Apache Tomcat 9.0.75的stdout日志问题
一、彻底关闭stdout日志输出
Tomcat的stdout.log和stderr.log是由启动脚本(如catalina.sh/catalina.bat)直接重定向生成的,单纯修改logging.properties不会生效,需要调整启动脚本:
Linux/macOS环境(修改catalina.sh)
- 打开
bin/catalina.sh文件 - 找到末尾附近的启动命令段,原内容类似:
"$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ org.apache.catalina.startup.Bootstrap "$@" start \ >> "$CATALINA_OUT" 2>&1 "&" - 将重定向部分
>> "$CATALINA_OUT" 2>&1替换为>/dev/null 2>&1,修改后:"$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \ -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \ -Dcatalina.base="$CATALINA_BASE" \ -Dcatalina.home="$CATALINA_HOME" \ -Djava.io.tmpdir="$CATALINA_TMPDIR" \ org.apache.catalina.startup.Bootstrap "$@" start \ >/dev/null 2>&1 "&" - 保存文件后重启Tomcat,
stdout.log将停止生成
Windows环境(修改catalina.bat)
- 打开
bin/catalina.bat文件 - 找到启动命令行,原内容类似:
%_EXECJAVA% %LOGGING_CONFIG% %JAVA_OPTS% %CATALINA_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" org.apache.catalina.startup.Bootstrap %CMD_LINE_ARGS% start >> "%CATALINA_OUT%" 2>&1 - 将
>> "%CATALINA_OUT%" 2>&1替换为>nul 2>&1,修改后:%_EXECJAVA% %LOGGING_CONFIG% %JAVA_OPTS% %CATALINA_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" org.apache.catalina.startup.Bootstrap %CMD_LINE_ARGS% start >nul 2>&1 - 重启Tomcat即可停止生成
stdout.log
二、配置stdout日志按日/按大小轮转
如果需要保留日志并实现自动轮转,可使用Tomcat自带的org.apache.juli.FileHandler替代默认重定向,步骤如下:
- 修改
conf/logging.properties文件:- 注释或删除原有
java.util.logging.ConsoleHandler相关配置 - 添加以下轮转配置:
# 定义stdout的轮转Handler handlers = 1stdout.org.apache.juli.FileHandler # 轮转规则:单个日志最大10MB,保留90天,最多保留100个文件,按日命名 1stdout.org.apache.juli.FileHandler.level = FINE 1stdout.org.apache.juli.FileHandler.directory = ${catalina.base}/logs 1stdout.org.apache.juli.FileHandler.prefix = stdout 1stdout.org.apache.juli.FileHandler.suffix = .log 1stdout.org.apache.juli.FileHandler.formatter = java.util.logging.SimpleFormatter 1stdout.org.apache.juli.FileHandler.maxDays = 90 1stdout.org.apache.juli.FileHandler.limit = 10485760 1stdout.org.apache.juli.FileHandler.count = 100 1stdout.org.apache.juli.FileHandler.append = true 1stdout.org.apache.juli.FileHandler.encoding = UTF-8 # 将root日志输出绑定到该Handler .level = INFO .handlers = 1stdout.org.apache.juli.FileHandler
- 注释或删除原有
- 修改启动脚本,取消默认输出重定向:
- Linux/macOS:按关闭日志的步骤,将
>> "$CATALINA_OUT" 2>&1替换为>/dev/null 2>&1 - Windows:将
>> "%CATALINA_OUT%" 2>&1替换为>nul 2>&1
- Linux/macOS:按关闭日志的步骤,将
- 重启Tomcat,日志将自动按配置规则轮转(如生成
stdout.2024-05-20.log,达到大小限制也会自动分割)
注意事项
- 修改启动脚本前建议备份原文件,避免操作失误导致Tomcat无法启动
- 若使用Windows服务形式运行Tomcat,需通过
tomcatw.exe配置界面的「Java」选项卡添加日志参数,并取消服务的输出重定向配置
内容的提问来源于stack exchange,提问作者MobDev
相关产品推荐
相关产品推荐

