关于按天切割Tomcat的catalina.out日志文件的配置

发布于:2024-11-28 ⋅ 阅读:(18) ⋅ 点赞:(0)

1、catalina.out 是 Tomcat 的标准输出和标准错误日志,通常输出到 Tomcat 安装目录下的 logs 文件夹中。这个日志文件会记录 Tomcat 启动、停止以及运行过程中产生的所有日志信息。

2、在Apache Tomcat中,日志文件catalina.out默认情况下不会自动按天切割。为了实现这一功能,通常有几种方法可以采用:

一、修改Tomcat的JULI日志配置

Tomcat不支持切割文件,但官方提供了日志文件输出的配置,在目录Tomcat**/conf/logging.properties里。
包括localhostmanagerhost-managercatalina等日志的输出配置。
要实现按天切割,翻译过来就是“输出日志到今天的文件里”,虽然实现了,但理念还是有区别的:
在来的基础上加以下这行代码:

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》


网站公告

今日签到

点亮在社区的每一天
去签到