• catalina.out 日志每天备份


    简介

    Tomcat 的 catalina.out 日志默认只要不停服务器就一直存,导致文件很大出现问题难以排查,所以要调整 catalina.out 的备份机制,每天备份一次。

    方式一 Tomcat 改用 Log4j

    tomcat 修改默认 java 的日志管理为 log4j,但好像只支持 tomcat7。tomcat8官方文档

    创建 log4j.properties

    创建 log4j.properties,保存到 $CATALINA_BASE/lib 目录,内容如下:

    log4j.rootLogger = INFO, CATALINA
    
    # Define all the appenders
    log4j.appender.CATALINA = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.CATALINA.File = ${catalina.base}/logs/catalina
    log4j.appender.CATALINA.Append = true
    log4j.appender.CATALINA.Encoding = UTF-8
    # Roll-over the log once per day
    log4j.appender.CATALINA.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
    log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.LOCALHOST = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.LOCALHOST.File = ${catalina.base}/logs/localhost
    log4j.appender.LOCALHOST.Append = true
    log4j.appender.LOCALHOST.Encoding = UTF-8
    log4j.appender.LOCALHOST.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
    log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.MANAGER = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.MANAGER.File = ${catalina.base}/logs/manager
    log4j.appender.MANAGER.Append = true
    log4j.appender.MANAGER.Encoding = UTF-8
    log4j.appender.MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
    log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.HOST-MANAGER = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.HOST-MANAGER.File = ${catalina.base}/logs/host-manager
    log4j.appender.HOST-MANAGER.Append = true
    log4j.appender.HOST-MANAGER.Encoding = UTF-8
    log4j.appender.HOST-MANAGER.DatePattern = '.'yyyy-MM-dd'.log'
    log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
    log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    log4j.appender.CONSOLE = org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE.Encoding = UTF-8
    log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n
    
    # Configure which loggers log to which appenders
    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost] = INFO, LOCALHOST
    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager] =
      INFO, MANAGER
    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager] =
      INFO, HOST-MANAGER
    

    最后几行也可以是

    log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=DEBUG
    log4j.logger.org.apache.catalina.core=DEBUG
    log4j.logger.org.apache.catalina.session=DEBUG
    

    添加替换 jar

    下载 Log4j,版本要求 1.2.x。替换 bin 中的 tomcat-juli.jar,添加 tomcat-juli-adapters.jar 和 log4j.jar 到 lib 中。(tomcat 两个 jar 下载地址另一个地址 在各个版本的 bin/extras 中,但只发现 tomcat7 有)。

    方式二 定时执行 Logrotate

    系统cron

    /etc/crontab 文件显示了 linux 的定时任务。

    01 * * * * root run-parts /etc/cron.hourly
    02 4 * * * root run-parts /etc/cron.daily
    22 4 * * 0 root run-parts /etc/cron.weekly
    42 4 1 * * root run-parts /etc/cron.monthly
    27 17 * * * root sh /xxx/xxx/xxx/xxx.sh 
    0 1 * * * root /bin/httpntp
    5 1 * * * root /bin/ftpsdns
    

    自定义cron

    用户定义的 cron 在 /var/spool/cron 下,文件名就是用户名,可以查看用户添加的定时任务。

    添加定时任务有两种方式:

    1. 可以使用 vim 直接编辑文件,不过没有格式提示。
    2. 使用 crontab -e 命令,文件内同样使用 vim 编辑,但退出后有提示(推荐),使用 crontab -l 查看定时任务(xxx 用户添加的定时在 /var/spool/cron/xxx 文件中可以看到)
    [root@123456]~# crontab -e
    */1 * * * * /usr/sbin/logrotate -vf /xxx/xxx/xxx/test-log/tomcat-logrotate
    #添加每分钟执行日志分割
    [root@123456]~# crontab -l
    */1 * * * * /usr/sbin/logrotate -vf /xxx/xxx/xxx/test-log/tomcat-logrotate
    

    tomcat-logrotate 文件如下(文件中可以写脚本,参数和示例见 logrotate):

    /xxx/xxx/xxx/tomcat/logs/catalina.out {
        ifempty
        copytruncate
        rotate 365
        missingok
        daily
        dateext
    }
    

    方式三 安装 cronolog

    详见 tomcat的catalina.out日志按天生成

    注意

    修改 Tomcat 启动脚本 catalina.sh 时可能和链接中博客描述的不一样,没有 CATALINA_OUT,只需要找到(第二行可能不一样,但第一行全文只有两处):

    org.apache.catalina.startup.Bootstrap "$@" start 
    >> "$CATALINA_OUT" 2>&1 "&"
    

    改为:

    org.apache.catalina.startup.Bootstrap "$@" start 2>&1 
    | /usr/local/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.out >> /dev/null &
    

    如果有 touch "$CATALINA_BASE"/logs/catalina.outtouch "$CATALINA_OUT" 一定要用 # 注释掉。

    对比

    1. 方式一:tomcat 官网只有 7 版本的 jar 包,别的版本不确定是否能用(未测试)。
    2. 方式二:logrotate 实际是拷贝日志再清空文件,可能导致丢日志,拷贝时间越长就丢的越多,不想丢日志就要在配置的文件 tomcat-logrotate 中写脚本通知 tomcat 停机后拷贝(都停机了还需要这么麻烦的拷贝日志吗......),而且 crontab 只精确到分,想要 23:59:59 执行只能定时到 59 分 再在脚本中 sleep 59 秒,更不稳定。
    3. 方式三(猜测):cronolog 接管 tomcat 的catalina.out 日志,由 cronolog 生成,专业软件还是比较靠谱的(推荐)。
  • 相关阅读:
    在Ubuntu20.04上安装MySQL8.0及正确配置[已验证]
    Linux Ubuntu 20.04 —添加开机启动(服务/脚本)
    Ubuntu进入文件夹路径及查看文件夹目录
    Ubuntu20.04安装JDK
    How to install shutter on Linux 20.04
    在Ubuntu 20.04 中以管理员Root 身份用可视化的方式打开根目录文件夹
    在Ubuntu 20.04 上安装Chromium
    Ubuntu20.04安装搜狗输入法的详细步骤
    Ubuntu 20.04换国内源 清华源 阿里源 中科大源 163源
    linux Deepin 20 系统更新源.txt
  • 原文地址:https://www.cnblogs.com/hligy/p/13955299.html
Copyright © 2020-2023  润新知