1. 调整日志级别,减少不必要的日志输出
日志级别决定了Tomcat记录日志的详细程度。根据环境需求调整级别,生产环境建议使用WARNING或ERROR(仅记录关键错误和警告),开发调试时可临时使用FINE(记录详细调试信息)。修改$CATALINA_BASE/conf/logging.properties文件,调整以下关键日志记录器的级别:
org.apache.catalina.level=WARNINGorg.apache.catalina.core.ContainerBase.[Catalina].[localhost].level=WARNING、org.apache.catalina.manager.level=WARNINGjava.sql.ConnectionPool.level=WARNING2. 配置日志轮转,防止日志文件过大
使用logrotate工具定期切割、压缩和清理Tomcat日志(如catalina.out),避免单个文件占用过多磁盘空间。在/etc/logrotate.d/tomcat中添加以下配置:
/opt/tomcat/logs/catalina.out {
daily # 每天轮转一次
rotate 14 # 保留14天的备份
compress # 压缩旧日志(如catalina.out.1.gz)
missingok # 若日志文件不存在也不报错
notifempty # 若日志为空则不轮转
copytruncate # 复制原日志后清空,避免重启Tomcat
}
该配置会自动管理日志文件,确保存储空间合理使用。
3. 优化访问日志配置,控制访问日志输出
Tomcat的访问日志(记录HTTP请求详情)默认可能记录大量信息,需通过server.xml调整AccessLogValve配置:
rotatable="true",避免单个访问日志文件过大;maxDays属性指定日志保留天数(如30天);pattern属性定义简洁的日志格式(如common格式仅记录IP、时间、请求方法、URL、状态码等关键信息)。<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="${CATALINA_BASE}/logs"
prefix="localhost_access_log"
suffix=".txt"
rotatable="true"
maxDays="30"
pattern="common" />
若无需长期保留访问日志,可注释掉该配置以完全关闭访问日志记录。
4. 使用异步日志记录,提升系统性能
同步日志记录会阻塞Tomcat主线程,影响性能。从Tomcat 8开始,可使用异步日志处理器(AsyncFileHandler)替代同步处理器(如FileHandler)。修改logging.properties文件,将日志处理器替换为异步模式:
# 替换同步处理器为异步处理器
1catalina.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
2localhost.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
3manager.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
4host-manager.org.apache.juli.FileHandler=org.apache.juli.AsyncFileHandler
# 配置异步处理器参数
org.apache.juli.AsyncFileHandler.level=FINE
org.apache.juli.AsyncFileHandler.directory=${catalina.base}/logs
org.apache.juli.AsyncFileHandler.prefix=catalina_async
org.apache.juli.AsyncFileHandler.suffix=.yyyy-MM-dd
org.apache.juli.AsyncFileHandler.bufferSize=8192 # 缓冲区大小(字节)
异步日志通过缓冲区批量写入磁盘,减少I/O阻塞,提升Tomcat处理请求的效率。
5. 自定义日志格式,提高日志可读性
通过修改logging.properties中的formatter属性,自定义日志输出格式。常用格式化类及示例:
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter,可通过java.util.logging.SimpleFormatter.format属性调整格式(如%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s [%2$s] %5$s%6$s%n,输出时间、级别、类名、消息);java.util.logging.ConsoleHandler.formatter=org.apache.juli.OneLineFormatter,将多行日志合并为一行,便于阅读。java.util.logging.ConsoleHandler.formatter=org.apache.juli.OneLineFormatter
java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS %4$s [%2$s] %5$s%6$s%n
自定义格式可根据需求突出关键信息(如时间、级别、类名),方便日志分析。
6. 限制特定组件的日志输出,降低噪音
对于不需要详细日志的组件(如第三方库、启动脚本),可将其日志级别设置为OFF或WARNING,减少无关日志的输出。在logging.properties中添加以下配置:
# 关闭特定组件的日志(如某第三方库)
com.example.thirdparty.level=OFF
# 关闭Tomcat启动相关的详细日志
org.apache.catalina.startup.level=WARNING
通过针对性限制,可过滤掉大量无用日志,聚焦关键信息。