优化Ubuntu Tomcat日志记录的实践方法
日志级别决定了日志的详细程度,降低不必要的日志输出可减少磁盘占用和性能消耗。Tomcat默认使用java.util.logging框架,通过修改conf/logging.properties文件调整级别:
org.apache.catalina、org.apache.catalina.core.ContainerBase),将级别从INFO调整为WARNING或ERROR(仅记录严重错误和警告)。org.apache.catalina.level = WARNINGsudo systemctl restart tomcat。访问日志记录了所有客户端请求,需通过server.xml开启轮转功能,避免单个文件过大:
conf/server.xml,找到AccessLogValve配置项,设置rotatable="true"(启用轮转)、maxDays(保留天数)和pattern(日志格式)。<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" /> 参数说明:%h(客户端IP)、%r(请求行)、%s(响应状态码)、%b(发送字节数)。Logrotate是Linux系统自带的日志管理工具,可实现自动轮转、压缩、删除旧日志:
/etc/logrotate.d/tomcat,内容如下:/usr/local/tomcat/logs/catalina.out { daily # 每天轮转 rotate 7 # 保留7个归档文件 compress # 压缩旧文件(如.gz格式) missingok # 日志文件不存在时不报错 notifempty # 日志为空时不轮转 create 640 tomcat tomcat # 新日志文件权限和所有者 postrotate /bin/kill -USR1 `cat /var/run/tomcat.pid` 2>/dev/null || true # 向Tomcat发送信号,重新打开日志文件 endscript } sudo logrotate -d /etc/logrotate.d/tomcat(模拟运行);强制立即轮转:sudo logrotate -f /etc/logrotate.d/tomcat。同步日志会阻塞应用程序线程,影响性能。Tomcat 8及以上版本支持AsyncFileHandler,将日志写入操作放入单独线程:
conf/logging.properties,将默认的ConsoleHandler替换为AsyncFileHandler:handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler 1catalina.org.apache.juli.AsyncFileHandler.level = FINE 1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs 1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina. 1catalina.org.apache.juli.AsyncFileHandler.rotatable = true 注意:异步日志可能会延迟日志写入,若需实时日志(如调试),需谨慎使用。针对高频但无需详细记录的组件(如启动过程、第三方库),提高其日志级别,减少冗余信息:
conf/logging.properties中,为特定包设置更高级别(如WARNING):org.apache.catalina.startup.level = WARNING(抑制Tomcat启动时的详细配置日志)、org.apache.jasper.level = WARNING(抑制JSP编译日志)。通过logging.properties设置单个日志文件的大小上限和备份数量,防止单个文件过大:
catalina日志为例):catalina.org.apache.juli.FileHandler.limit = 10000000 # 单个文件最大10MB catalina.org.apache.juli.FileHandler.count = 7 # 保留7个备份文件 此配置会在日志达到10MB时自动创建新文件,保留最近7个文件。Tomcat默认的java.util.logging功能有限,切换至Log4j可获得日志分割、集中管理、灵活格式化等优势:
log4j-1.2.17.jar)和适配器(tomcat-juli-adapters.jar),放入lib目录。conf/logging.properties文件。conf目录下创建log4j.properties,配置滚动日志:log4j.rootLogger=INFO, file log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.File=${catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log log4j.appender.file.MaxFileSize=10MB log4j.appender.file.MaxBackupIndex=10 log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n