1. 调整日志级别,减少不必要的日志输出
Tomcat默认使用java.util.logging框架,通过修改conf/logging.properties文件可控制日志详细度。将全局日志级别从INFO调整为WARNING或ERROR,可过滤掉调试、配置等无关信息。例如:
org.apache.catalina.core.ContainerBase.[Catalina].level = WARNING
如需针对特定组件(如JDBC、Servlet)调整,可添加具体包路径的日志级别设置,如:
java.sql.level = WARNING # 关闭JDBC驱动的详细日志
注意:降低日志级别可能导致部分故障信息丢失,生产环境需权衡日志完整性与磁盘占用。
2. 禁用不必要的日志类型,减少日志源
conf/server.xml文件,注释或删除AccessLogValve配置,可完全停止访问日志记录:<!--
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="access_log"
suffix=".txt"
pattern="common" />
-->
logging.properties中将其日志级别设为OFF。3. 使用日志切割工具,管理日志文件生命周期
通过logrotate工具实现日志的定期轮转、压缩和删除,避免单个日志文件过大。创建/etc/logrotate.d/tomcat配置文件,添加以下内容:
/path/to/tomcat/logs/catalina.out {
daily # 每天轮转
rotate 7 # 保留最近7天日志
compress # 压缩旧日志(如gzip)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
copytruncate # 复制原日志后清空,避免重启服务
dateext # 使用日期作为轮转文件后缀(如catalina.out-20250930)
}
此配置可有效控制catalina.out文件的大小和数量。
4. 启用异步日志记录,降低I/O压力
Tomcat 8及以上版本支持异步日志,通过AsyncFileHandler替代同步的ConsoleHandler,减少日志写入对主线程的影响,提升性能的同时降低磁盘I/O占用。修改logging.properties文件,将处理器替换为异步模式:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
异步日志会将日志写入内存队列,由后台线程批量写入磁盘,显著减少频繁I/O操作。
5. 配置日志滚动策略,限制单个日志文件大小
在logging.properties中,通过FileHandler的maxDays、maxFiles参数限制日志文件的保留时间和数量。例如:
1catalina.org.apache.juli.FileHandler.maxDays = 7
1catalina.org.apache.juli.FileHandler.maxFiles = 10
此配置表示单个日志文件最多保留7天,最多保留10个归档文件,超过则自动删除旧文件。
6. 重定向或清空日志文件,避免无意义输出
/dev/null:修改catalina.sh文件,在启动脚本中添加以下行,将日志输出重定向到空设备(仅适用于不需要保留日志的场景):JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties"
cat /dev/null > $CATALINA_BASE/logs/catalina.out # 清空现有日志
cron定时任务每天凌晨清空日志文件,例如:0 3 * * * cat /dev/null > /path/to/tomcat/logs/catalina.out
注意:重定向到/dev/null会丢失所有日志,仅建议在测试环境或不需要日志的场景使用。
7. 使用更高效的日志框架,替代默认系统
Tomcat默认的java.util.logging框架功能有限,建议切换至Log4j 2或Logback等成熟框架,它们提供更灵活的日志管理功能(如按天分割、压缩、动态调整级别)。以Log4j 2为例,步骤如下:
log4j-core、log4j-api、tomcat-juli-adapter等jar包复制到lib目录;conf/logging.properties文件;conf/log4j2.xml配置文件,定义日志输出格式、滚动策略和级别;conf/context.xml,添加swallowOutput="true"以捕获应用日志。8. 定期清理过期日志,释放磁盘空间
通过cron定时任务定期删除超过保留期限的日志文件。例如,创建cleanup_logs.sh脚本:
#!/bin/bash
find /path/to/tomcat/logs/ -type f -mtime +30 -name "*.log" -exec rm -f {} \;
find /path/to/tomcat/logs/ -type f -mtime +30 -name "*.gz" -exec rm -f {} \;
然后添加cron任务,每天凌晨执行:
0 0 * * * /path/to/tomcat/bin/cleanup_logs.sh
此脚本可自动删除30天前的.log和.gz文件,释放磁盘空间。