catalina.out 日志每天备份
Posted hligy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 下,文件名就是用户名,可以查看用户添加的定时任务。
添加定时任务有两种方式:
- 可以使用 vim 直接编辑文件,不过没有格式提示。
- 使用 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.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.out
或 touch "$CATALINA_OUT"
一定要用 # 注释掉。
对比
- 方式一:tomcat 官网只有 7 版本的 jar 包,别的版本不确定是否能用(未测试)。
- 方式二:logrotate 实际是拷贝日志再清空文件,可能导致丢日志,拷贝时间越长就丢的越多,不想丢日志就要在配置的文件 tomcat-logrotate 中写脚本通知 tomcat 停机后拷贝(都停机了还需要这么麻烦的拷贝日志吗......),而且 crontab 只精确到分,想要 23:59:59 执行只能定时到 59 分 再在脚本中 sleep 59 秒,更不稳定。
- 方式三(猜测):cronolog 接管 tomcat 的catalina.out 日志,由 cronolog 生成,专业软件还是比较靠谱的(推荐)。
以上是关于catalina.out 日志每天备份的主要内容,如果未能解决你的问题,请参考以下文章