1. 调整日志级别,减少不必要的日志输出
Tomcat默认使用java.util.logging框架,日志级别从低到高分为FINEST、FINER、FINE、CONFIG、INFO、WARNING、SEVERE、OFF。默认的INFO级别会记录大量常规运行信息(如启动流程、请求处理细节),可通过修改conf/logging.properties文件降低级别。例如,将全局日志级别设为WARNING,或针对特定组件(如org.apache.catalina、org.apache.coyote)设置更高级别,过滤掉调试或冗余信息,显著减少日志体积。
2. 启用异步日志记录,提升系统性能
同步日志记录会阻塞应用线程,影响Tomcat处理请求的效率。从Tomcat 8开始,可使用org.apache.juli.AsyncFileHandler替代默认的ConsoleHandler或FileHandler。在conf/logging.properties中修改handlers配置,将java.util.logging.ConsoleHandler替换为org.apache.juli.AsyncFileHandler,并保留原有的日志处理器(如1catalina.org.apache.juli.AsyncFileHandler)。异步日志通过队列缓冲日志事件,由后台线程写入文件,减少线程阻塞,提升吞吐量。
3. 配置日志轮转策略,避免单个文件过大
当日志文件持续增长时,会占用大量磁盘空间,甚至导致磁盘写满。可通过以下两种方式实现轮转:
conf/logging.properties中,为FileHandler设置limit(单个文件最大大小,单位字节)和count(保留的日志文件数量)。例如,1catalina.org.apache.juli.FileHandler.limit = 10000000(约10MB)、1catalina.org.apache.juli.FileHandler.count = 5,表示每个日志文件最大10MB,保留5个历史文件。/etc/logrotate.d/tomcat配置文件,设置每日轮转(daily)、保留7天日志(maxage 7)、压缩旧日志(compress)、删除超过30天的日志(maxsize 100M或maxage 30)。例如:/var/log/tomcat/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
create 640 tomcat tomcat
sharedscripts
postrotate
systemctl restart tomcat > /dev/null 2>&1 || true
endscript
}
4. 禁用不必要的日志输出,聚焦关键信息
conf/server.xml中注释AccessLogValve配置,或设置enabled="false"。例如:<!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> -->
conf/logging.properties中,将不需要详细日志的组件(如org.apache.jasper、org.apache.catalina.startup)的日志级别调高。例如:org.apache.jasper.level = WARNING
org.apache.catalina.startup.level = WARNING
5. 集成成熟日志框架,提升灵活性
Tomcat原生日志框架功能有限,建议集成Log4j或Logback(更推荐),支持按日期/大小滚轮、动态调整级别、多输出目标(如数据库、消息队列)。具体步骤:
log4j-core、log4j-api(或logback-classic、logback-core)的jar包复制到lib目录;conf/logging.properties(避免冲突);log4j2.xml)到conf目录,配置滚动策略、日志格式和输出路径。例如,Log4j2的滚动配置:<RollingFile name="FileAppender" fileName="logs/tomcat.log"
filePattern="logs/tomcat-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="30"/>
</RollingFile>
6. 使用日志分析工具,挖掘日志价值
原始日志难以直接用于问题排查和性能分析,可通过以下工具提升日志利用率: