码迷,mamicode.com
首页 > 其他好文 > 详细

catalina.out 日志每天备份

时间:2020-11-16 13:45:07      阅读:10      评论:0      收藏:0      [点我收藏+]

标签:没有   base   enc   地址   end   官方   tomcat7   精确   排查   

简介

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 &

如果有 "$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 生成,专业软件还是比较靠谱的(推荐)。

catalina.out 日志每天备份

标签:没有   base   enc   地址   end   官方   tomcat7   精确   排查   

原文地址:https://www.cnblogs.com/hligy/p/13955299.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!