1. 调整日志级别,减少不必要的日志输出
Tomcat的日志级别从低到高分为FINEST、FINER、FINE、CONFIG、INFO、WARNING、ERROR、FATAL。默认情况下,部分日志级别设置为INFO,会输出大量非关键信息(如组件启动、常规请求处理细节)。通过修改conf/logging.properties文件,将不必要的日志级别提升至WARNING或ERROR,可显著减少日志量。例如:
org.apache.catalina.level(Tomcat核心组件日志)从INFO改为WARNING;org.apache.catalina.startup.level(启动日志)从INFO改为WARNING;ERROR或OFF。2. 启用异步日志记录,降低I/O阻塞
Tomcat 8及以上版本支持异步日志记录(AsyncFileHandler),通过将日志写入任务放入单独的线程池,避免同步日志对主线程的阻塞,提升请求处理性能。修改conf/logging.properties文件,将默认的ConsoleHandler替换为AsyncFileHandler:
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
异步日志适用于高并发场景,能有效减少日志写入对Tomcat响应时间的影响。
3. 禁用或优化访问日志,减少磁盘占用
访问日志(Access Log)记录每个请求的详细信息(如IP、URL、响应时间),若不需要详细分析访问情况,可通过以下方式禁用或优化:
conf/server.xml文件,注释掉AccessLogValve配置(位于<Host>标签内):<!--
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
-->
rotatable="true"(默认开启)和maxDays属性(保留天数),避免单个日志文件过大。例如:<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" rotatable="true" maxDays="30"
pattern="%h %l %u %t "%r" %s %b" />
4. 配置日志轮转策略,避免单文件过大
当日志文件持续增长时,会导致磁盘空间耗尽,影响系统性能。可通过以下方式实现日志轮转:
logrotate工具:编辑/etc/logrotate.d/tomcat文件,配置自动轮转、压缩和删除旧日志。例如:/opt/tomcat/logs/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 tomcat tomcat
sharedscripts
postrotate
/bin/kill -USR1 `cat /opt/tomcat/temp/tomcat.pid 2>/dev/null` 2>/dev/null || true
endscript
}
上述配置表示:每天轮转一次,保留最近7天的压缩日志(*.log.1.gz~*.log.7.gz),轮转后重启Tomcat以释放文件句柄。catalina.out的特殊处理:catalina.out是Tomcat的标准输出/错误日志,默认不自动轮转。可通过修改catalina.sh脚本,将输出重定向到带日期的日志文件:"$CATALINA_BASE"/logs/catalina.$(date +'%Y-%m-%d').log
或使用logrotate单独配置catalina.out的轮转。5. 限制特定组件的日志输出,聚焦关键信息
对于不需要详细日志的组件(如启动脚本、第三方库),可通过logging.properties文件限制其日志级别,减少无关日志的输出。例如:
org.apache.catalina.startup(启动组件)的日志级别:org.apache.catalina.startup.level = WARNING
org.apache.jasper(JSP编译组件)的日志级别(若不需要JSP编译细节):org.apache.jasper.level = WARNING
通过聚焦关键组件的日志,能快速定位问题,同时减少日志量。6. 考虑更换日志框架,提升灵活性和性能
Tomcat默认使用java.util.logging(JUL)框架,但其功能和性能有限。可更换为更成熟的日志框架(如Log4j 2或Logback),它们支持更丰富的日志级别、异步日志、动态配置等功能。更换步骤如下:
log4j-core、log4j-api或logback-classic、logback-core)复制到$CATALINA_HOME/lib目录;bin/catalina.sh(Linux)或bin/catalina.bat(Windows)中添加框架配置文件路径:export CATALINA_OPTS="$CATALINA_OPTS -Dlog4j.configurationFile=$CATALINA_HOME/conf/log4j2.xml"
logging.properties文件,避免冲突。