Tomcat日志分割常见实现方法
Cronolog是专为日志分割设计的工具,可按时间将catalina.out拆分为每日或自定义格式的文件,减少单文件体积。
yum)安装,命令为yum install cronolog;或从官网下载源码编译安装(./configure && make && make install)。bin/catalina.sh,找到CATALINA_OUT变量设置处(通常有两处),将其值改为带时间格式的路径(如CATALINA_OUT="$CATALINA_BASE/logs/catalina.%Y%m%d.out"),并注释掉touch "$CATALINA_OUT"行(避免重复创建空文件)。>> "$CATALINA_OUT" 2>&1 &替换为2>&1 | /usr/local/sbin/cronolog "$CATALINA_OUT" >> /dev/null &(路径需与which cronolog结果一致)。bin/shutdown.sh && bin/startup.sh使配置生效,日志将按日期分割为catalina.YYYYMMDD.out格式。Logrotate是Linux系统自带的日志管理工具,支持按时间/大小分割、压缩、删除旧日志,无需修改Tomcat代码。
yum install logrotate),系统默认已包含该工具。/etc/logrotate.d/目录下新建tomcat文件,添加以下内容(以分割catalina.out为例):/opt/tomcat/logs/catalina.out {
daily # 每日分割(可选:weekly/monthly)
copytruncate # 复制原日志并清空(适用于正在写入的文件)
rotate 30 # 保留30份旧日志
compress # 用gzip压缩旧日志(如catalina.out-20250930.gz)
missingok # 日志不存在时不报错
notifempty # 日志为空时不分割
dateext # 使用日期作为备份文件后缀(如catalina.out-20250930)
}
logrotate -d /etc/logrotate.d/tomcat测试配置语法(无错误则继续);用logrotate -f /etc/logrotate.d/tomcat强制立即分割(验证是否生效)。Log4j是Java常用日志框架,支持按大小、时间分割日志文件,且能控制日志级别、格式,适用于Tomcat应用日志管理。
log4j-core、log4j-api、tomcat-juli-adapters等JAR包放入Tomcat/lib目录(确保版本兼容,如Log4j 2.x)。conf目录下创建log4j2.xml(或log4j.properties),示例配置(按天分割catalina.log,保留30天):<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="${catalina.base}/logs/catalina.log"
filePattern="${catalina.base}/logs/catalina-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/> <!-- 按天分割 -->
<SizeBasedTriggeringPolicy size="10MB"/> <!-- 单个文件超过10MB时分割 -->
</Policies>
<DefaultRolloverStrategy max="30"/> <!-- 保留30份备份 -->
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>
catalina.sh中添加JVM参数:-Dlog4j.configurationFile=${catalina.base}/conf/log4j2.xml。Tomcat默认使用java.util.logging(JUL)框架,可通过修改conf/logging.properties文件实现日志自动分割(适用于简单场景)。
handlers行(默认为handlers = 1catalina.org.apache.juli.FileHandler, java.util.logging.ConsoleHandler),新增或修改1catalina.org.apache.juli.FileHandler参数:1catalina.org.apache.juli.FileHandler.level = INFO
1catalina.org.apache.juli.FileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.FileHandler.prefix = catalina.
1catalina.org.apache.juli.FileHandler.maxDays = 730 # 保留2年(730天)
1catalina.org.apache.juli.FileHandler.maxLength = 10485760 # 单个文件最大10MB(可选)
1catalina.org.apache.juli.FileHandler.formatter = org.apache.juli.VerbatimFormatter
maxDays(时间)或maxLength(大小)自动分割,旧日志会自动删除。