在Ubuntu系统上配置Tomcat日志主要涉及访问日志、运行日志的格式与级别调整、日志分割、轮转管理等步骤,以下是详细操作指南:
Tomcat的日志配置文件主要集中在$CATALINA_HOME/conf目录下($CATALINA_HOME为Tomcat安装目录,如/opt/tomcat或/var/lib/tomcat),关键文件包括:
server.xml:用于配置访问日志;logging.properties:用于配置**运行日志(如catalina、localhost等)**的级别、格式及处理器。访问日志用于记录客户端的HTTP请求详情(如IP、请求方法、响应状态等),需修改server.xml文件:
$CATALINA_HOME/conf/server.xml,找到<Host>标签(通常位于文件末尾);AccessLogValve配置):<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"
resolveHosts="false"/>
directory:日志存储路径(相对于$CATALINA_BASE,默认为logs目录);prefix:日志文件前缀(如localhost_access_log.);suffix:日志文件后缀(如.txt);pattern:日志格式(常用common仅记录基本信息,combined记录更详细的请求/响应信息,如引用页、用户代理)。运行日志包括Tomcat启动/关闭信息、应用错误日志等,需修改logging.properties文件:
$CATALINA_HOME/conf/logging.properties,调整以下内容:
SEVERE > WARNING > INFO > CONFIG > FINE > FINER > FINEST):# 设置catalina日志级别为FINE(记录详细信息),localhost日志级别为INFO
org.apache.catalina.core.ContainerBase.[Catalina].level = FINE
org.apache.catalina.core.ContainerBase.[Catalina].[localhost].level = INFO
ConsoleHandler的格式,包含时间、级别、类名、消息):java.util.logging.ConsoleHandler.formatter = java.util.logging.Formatter {
private static final String format = "[%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS] [%4$-6s] [%2$s: %5$s] %3$s%n";
public synchronized String format(LogRecord lr) {
return format.format(new Date(lr.getMillis()), lr.getLevel().getLocalizedName(),
lr.getMessage(), lr.getSourceClassName(), lr.getSourceMethodName());
}
};
# 设置catalina日志轮转(保留30天)
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30
sudo systemctl restart tomcat。Logrotate是Linux系统自带的日志管理工具,可自动切割、压缩、删除旧日志,避免磁盘空间耗尽:
sudo apt-get install logrotate;sudo nano /etc/logrotate.d/tomcat,添加以下内容:/opt/tomcat/logs/*.log {
daily # 每天轮转
rotate 30 # 保留30个旧日志
compress # 压缩旧日志(如.gz格式)
missingok # 若日志不存在也不报错
notifempty # 若日志为空则不轮转
create 640 tomcat tomcat # 新日志文件权限及所有者
sharedscripts # 所有日志轮转完成后执行脚本
postrotate
/bin/kill -USR1 $(cat /var/run/tomcat.pid) 2>/dev/null || true
endscript
}
postrotate脚本会向Tomcat发送USR1信号,触发Tomcat重新打开日志文件,避免日志丢失。Cronolog可根据时间(如天、小时)实时分割日志,适合高流量场景:
sudo apt-get install cronolog;catalina.sh文件($CATALINA_HOME/bin/catalina.sh),找到exec "$_RUNJAVA"行,在前面添加:# 设置CATALINA_OUT使用Cronolog分割
if [ -z "$CATALINA_OUT" ]; then
CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y-%m-%d.out"
fi
exec "$_RUNJAVA" \
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager \
-Djava.util.logging.config.file="$CATALINA_BASE/conf/logging.properties" \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 &
重启Tomcat后,catalina.out会按天分割为catalina.YYYY-MM-DD.out。Tomcat的日志文件默认存储在$CATALINA_HOME/logs目录下,常见文件包括:
catalina.out:Tomcat标准输出/错误输出(未配置分割前);catalina.YYYY-MM-DD.log:Tomcat运行日志(分割后);localhost_access_log.YYYY-MM-DD.txt:访问日志(分割后);localhost.YYYY-MM-DD.log:本地应用日志;manager.YYYY-MM-DD.log:Tomcat Manager应用日志。通过以上步骤,可实现Tomcat日志的有效配置与管理,满足日常监控、故障排查及合规性需求。