Tomcat在Linux上的日志管理
Tomcat在Linux环境下的日志管理是运维工作的重要环节,主要涉及日志文件定位、日志级别调整、日志轮转策略、访问日志配置及异步日志优化等方面,以下是具体实践方法:
Tomcat的日志默认存储在$CATALINA_BASE/logs目录(通常与$CATALINA_HOME一致,如/opt/tomcat/logs或/usr/local/tomcat/logs),主要包含以下类型:
日志级别决定了日志的详细程度,Tomcat使用java.util.logging框架,级别从低到高为:FINEST(最详细)→FINER→FINE→CONFIG→INFO(默认)→WARNING→ERROR→SEVERE(最简略)。
调整方法:修改$CATALINA_BASE/conf/logging.properties文件,通过logger名称指定组件的日志级别。例如:
# 设置全局日志级别为INFO(减少不必要的调试信息)
.level = INFO
# 设置Catalina引擎的日志级别为WARNING(仅记录警告及以上信息)
org.apache.catalina.core.ContainerBase.[Catalina].level = WARNING
# 设置localhost内部组件的日志级别为FINE(排查内部错误时开启)
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = FINE
修改后需重启Tomcat使配置生效。
日志轮转用于控制日志文件的大小和数量,避免占用过多磁盘空间。常见方法如下:
Logrotate是Linux系统自带的日志管理工具,支持自动轮转、压缩、删除旧日志。配置步骤:
/etc/logrotate.d/tomcat文件,添加以下内容(以catalina.out为例):/opt/tomcat/logs/catalina.out {
daily # 每天轮转
rotate 30 # 保留30天日志
compress # 压缩旧日志(gzip)
missingok # 日志不存在时不报错
notifempty # 日志为空时不轮转
copytruncate # 复制日志后截断原文件(避免重启Tomcat)
}
logrotate -d /etc/logrotate.d/tomcat(模拟运行,无实际修改);logrotate -f /etc/logrotate.d/tomcat;Cronolog是专门用于日志分割的工具,可按时间(日、月)生成日志文件。配置步骤:
yum install cronolog(CentOS)或apt install cronolog(Ubuntu);$CATALINA_HOME/bin/catalina.sh,将catalina.out的重定向改为Cronolog命令:org.apache.catalina.startup.Bootstrap "$@" start \
2>&1 | /usr/local/sbin/cronolog "$CATALINA_BASE/logs/catalina.%Y-%m-%d.out" &
$CATALINA_HOME/bin/shutdown.sh && $CATALINA_HOME/bin/startup.sh。访问日志记录HTTP请求的详细信息(如IP地址、请求方法、响应状态码),需通过server.xml配置AccessLogValve组件:
$CATALINA_HOME/conf/server.xml,在<Host>标签内添加以下内容:<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs" # 日志存储目录
prefix="localhost_access_log" # 日志文件前缀
suffix=".txt" # 日志文件后缀
pattern="%h %l %u %t "%r" %s %b %{Referer}i %{User-Agent}i" # 日志格式
rotatable="true" # 启用日期轮转
maxDays="30" # 保留30天日志
/>
%h:客户端IP地址;%r:HTTP请求行(如GET /index.html HTTP/1.1);%s:响应状态码(如200、404);%b:响应大小(字节);%{Referer}i:请求来源页面;%{User-Agent}i:客户端浏览器信息。Tomcat 8及以上版本支持异步日志,通过AsyncFileHandler替代同步的FileHandler,减少日志写入对主线程的影响。配置方法:
$CATALINA_BASE/conf/logging.properties,将ConsoleHandler或FileHandler替换为AsyncFileHandler:handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler
# 配置异步Handler的日志级别、目录和前缀
1catalina.org.apache.juli.AsyncFileHandler.level = INFO
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 7
1catalina.org.apache.juli.AsyncFileHandler.maxFileSize = 10MB
1catalina.org.apache.juli.AsyncFileHandler.formatter = java.util.logging.SimpleFormatter
copytruncate(Logrotate)或Cronolog分割,避免直接删除(可能导致日志丢失);rotate值是否大于0,或copytruncate是否正确;tomcat)对logs目录有读写权限(chown -R tomcat:tomcat /opt/tomcat/logs)。通过以上方法,可实现Tomcat在Linux环境下的高效日志管理,既满足故障排查需求,又避免日志占用过多磁盘空间。