Java Tomcat日志管理策略
Tomcat支持多级别日志记录(从高到低为:SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST),可根据环境需求调整级别,平衡日志详细度与性能。
conf/logging.properties文件中的.handlers或根日志级别(如.level=INFO),控制所有日志输出的最低级别。org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO # 本地主机访问日志级别
com.yourapp.level = FINE # 应用包日志级别(调试用)
生产环境建议使用INFO或WARN,开发环境可使用DEBUG或FINE。日志轮转用于防止单个日志文件过大,常见方式有两种:
conf/logging.properties文件设置FileHandler参数,实现按大小或数量轮转:java.util.logging.FileHandler.level = INFO
java.util.logging.FileHandler.pattern = ${catalina.base}/logs/catalina.%g.log # %g表示生成序号
java.util.logging.FileHandler.limit = 50000000 # 单个文件最大50MB
java.util.logging.FileHandler.count = 10 # 保留10个文件
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
/etc/logrotate.d/tomcat配置文件,示例如下:/var/log/tomcat/catalina.out {
daily # 每天轮转
rotate 7 # 保留7天
compress # 压缩旧日志
delaycompress # 延迟压缩(当前日志不压缩)
missingok # 文件不存在不报错
notifempty # 空文件不轮转
create 640 tomcat tomcat # 新日志文件权限和所有者
postrotate
/bin/kill -HUP `cat /var/run/tomcat.pid` 2>/dev/null || true # 重启Tomcat刷新日志
endscript
}
可手动测试配置(logrotate -d /etc/logrotate.d/tomcat)或设置cron自动执行(默认每日运行)。Tomcat默认使用java.util.logging(JULI),但其功能有限,建议替换为更成熟的框架:
log4j-core-2.x.jar、log4j-api-2.x.jar)复制到lib目录。conf/logging.properties文件(避免冲突)。log4j2.xml)到conf目录,示例如下:<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<File name="File" fileName="${catalina.base}/logs/app.log" append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n"/>
</File>
<Async name="Async" bufferSize="1024">
<AppenderRef ref="File"/>
</Async>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="Async"/>
</Root>
</Loggers>
</Configuration>
Tomcat的访问日志记录客户端请求详情(如IP、方法、URL、状态码),通过server.xml配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" # 常用格式:IP、用户、时间、请求、状态、字节数
rotatable="true" # 启用轮转
maxDays="7"/> # 保留7天
</Host>
pattern常用变量:%h(客户端IP)、%r(请求行)、%s(响应状态)、%b(发送字节数)。rotatable并设置maxDays,避免访问日志无限增长。umask设置新日志文件的默认权限(如umask 0022,对应权限644),修改catalina.sh脚本:umask 0022 # 确保日志文件可被其他用户读取(如运维人员)
#!/bin/bash
find /var/log/tomcat/ -type f -name "*.log" -mtime +30 -exec rm -f {} \; # 删除30天前的.log文件
将脚本添加到cron(如0 0 * * * /path/to/cleanup_logs.sh),每天凌晨执行。ERROR、Exception),设置阈值告警(如1分钟内出现5次ERROR则触发邮件通知),及时发现系统问题。Filter接口)拦截敏感信息。pattern排除敏感字段(如%m替换为自定义过滤器)。chown -R tomcat:tomcat /var/log/tomcat),防止日志被篡改或泄露。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。