1、catalina.out 是 Tomcat 的标准输出和标准错误日志,通常输出到 Tomcat 安装目录下的 logs 文件夹中。这个日志文件会记录 Tomcat 启动、停止以及运行过程中产生的所有日志信息。
2、在Apache Tomcat中,日志文件catalina.out默认情况下不会自动按天切割。为了实现这一功能,通常有几种方法可以采用:
一、修改Tomcat的JULI日志配置
Tomcat不支持切割文件,但官方提供了日志文件输出的配置,在目录Tomcat**/conf/logging.properties
里。
包括localhost
、manager
、host-manager
、catalina
等日志的输出配置。
要实现按天切割,翻译过来就是“输出日志到今天的文件里”,虽然实现了,但理念还是有区别的:
在来的基础上加以下这行代码:
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.pattern = yyyy-MM-dd
扩展:
1catalina.org.apache.juli.AsyncFileHandler.suffix = .%g
1catalina.org.apache.juli.AsyncFileHandler.suffix = .out
说明:
Tomcat从版本7开始支持Java Util Logging (JUL) API,可以通过修改logging.properties文件来改变日志记录的行为,包括日志分割。但这种方法相对复杂,且不如第二种直接。
二、使用logrotate工具
logrotate
是一个用于管理日志文件的工具,它可以自动分割、压缩、删除和邮寄日志文件。通过配置 logrotate,我们可以轻松实现 catalina.out 按日期分割的需求。
我们需要在 Linux
系统上安装 logrotate(通常默认已安装
)。
如何判断linux是否自带logrotate?
# 判断是否已安装的几个命令
which logrotate
whereis logrotate
...
在/etc/logrotate.d/目录下创建或编辑一个针对Tomcat的日志配置文件,例如tomcat-catalina
/path/to/tomcat/logs/catalina.out {
daily # 按天分割日志文件
rotate 7 # 保留最近7个日志文件
missingok # 如果日志文件不存在,不报错
notifempty # 如果日志文件为空,不分割
compress # 压缩分割后的日志文件
delaycompress # 延迟压缩到下一个周期,确保当前周期的日志文件可用
copytruncate # 复制并截断原文件,而不是移动并创建新文件(避免Tomcat因文件被移动而丢失输出)
create 0640 tomcat tomcat # 以指定权限和所有者创建新日志文件
postrotate
# 在分割日志后执行的命令,这里可以重启Tomcat的日志输出(可选)
# 但重启Tomcat可能会影响服务,通常不需要这样做
# /path/to/tomcat/bin/shutdown.sh
# /path/to/tomcat/bin/startup.sh
# 或者,更简单地,向Tomcat发送HUP信号以重新打开日志文件(如果Tomcat支持)
# kill -HUP $(cat /path/to/tomcat/logs/tomcat.pid)
# 注意:上面的命令需要Tomcat配置了PID文件的路径
endscript
}
注意:
/path/to/tomcat/
需要替换为你的 Tomcat 安装路径。copytruncate
选项用于在不停止 Tomcat 的情况下截断日志文件。但请注意,这要求 Tomcat 的日志输出是通过标准的文件描述符(如 stdout 或 stderr)进行的,并且 Tomcat 能够处理文件被截断的情况。如果 Tomcat 是通过重定向输出到 catalina.out 的方式记录日志的,那么可能需要考虑其他方法(如重启 Tomcat 或发送信号)来重新打开日志文件。然而,在生产环境中重启 Tomcat 可能会带来不必要的风险,因此通常建议使用 copytruncate 或确保 Tomcat 能够处理文件截断。postrotate
脚本块中的命令是在每次分割日志后执行的。这里提供了一些可选的命令,但请根据你的实际情况谨慎使用。特别是重启 Tomcat 的命令,可能会影响到正在运行的服务。测试
分割功能,确保分割后的日志文件完整且符合预期部署
:logrotate 通常由系统的 cron 服务定期调用。在大多数 Linux 发行版中,logrotate 的主配置文件(通常是 /etc/logrotate.conf)会包含一个 cron 任务,用于每天运行 logrotate。因此,你不需要手动设置 cron 任务。只需确保你的 logrotate 配置文件(如 /etc/logrotate.d/tomcat-catalina)被正确包含在主配置文件中即可。
附:无注释版:
/tomcat**/logs/catalina.out {
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
create 0640 tomcat tomcat
postrotate
endscript
}
三、使用cron任务配合脚本
这种方法未试验~
《The End》