当前位置: 首页 > article >正文

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

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》


http://www.kler.cn/a/412796.html

相关文章:

  • 彻底理解如何保证ElasticSearch和数据库数据一致性问题
  • OpenAI Whisper 语音识别 模型部署及接口封装
  • 【21-30期】Java技术深度剖析:从分库分表到微服务的核心问题解析
  • Spring Boot英语知识网站:用户体验设计
  • 解决 vxe-table v3.9 + iview 或者 view-design 中使用 Select 后无法选中的问题
  • 代码随想录算法训练营day46|动态规划09
  • 云技术-docker
  • 【text2sql】DB-GPT-Hub:text2sql的微调框架及基准测试套件
  • 开发常见问题及解决
  • JavaEE---计算机是如何工作的?
  • 详解Qt之QCache 高速缓存
  • 深度学习基础02_损失函数BP算法(上)
  • 分布式项目使用Redis实现数据库对象自增主键ID
  • 音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域
  • 了解UIUX设计
  • Linux 服务器使用指南:诞生与演进以及版本(一)
  • 【软考速通笔记】系统架构设计师⑤——软件工程基础知识
  • 转录组数据挖掘(生物技能树)(第11节)下游分析
  • 【设计模式】1. 构建器模式(Builder Pattern)是一种创建型设计模式
  • 林业产品推荐系统:Spring Boot设计模式
  • 【MySQL系列】使用正则表达式确保`card_secret`字段格式正确
  • 【python】面试宝典(五)
  • 如何将低危的 SSRF 盲注升级为严重漏洞(AWS、S3)
  • SpringBoot开发——详细讲解 Spring Boot 项目中的 POM 配置
  • 利用Prompt工程为LLM提升推理能力
  • 自媒体图文视频自动生成软件|03| 页面和结构介绍