【Tomcat】在 linux 上实现 Catlina.log 自动分割,防止文件过大

背景描述

catalina.out即标准输出和标准出错,所有输出到这两个位置的都会进入catalina.out,这里包含tomcat运行自己输出的日志以及应用里向console输出的日志。默认这个日志文件是不会进行自动切割的,所以我们需要借助其他工具进行切割(注意:catalina.out文件如果过大会影响性能)

工具

  • logrotate(linux 自带)
  • crontab(linux 自带)

具体实现

第一步

创建 logrotate 配置文件如下:

/etc/logrotate.d/tomcat

第二步

将下面的内容复制到上面的配置文件中

/var/log/tomcat/catalina.out {   
	copytruncate   
	daily   
	rotate 7
	dateext
	dateformat -%Y%m%d   
	compress   
	missingok   
	size 5M  
}  

关于上面的配置:

  • 确保上面的路径/var/log/tomcat/catalina.out 已调整为指向您的 tomcat 的 catalina.out
  • daily -每天轮换 catalina.out
  • rotate 7– 最多保留7 个日志文件
  • dateext – 日期作为后缀
  • dateformat -%Y%m%d –指定日期的格式
  • compress – 压缩旋转的文件
  • size – 如果 catalina.out 的大小大于5M ,则旋转

注意:每个配置指令都需要独占一行

第三步

编辑 crontab 配置文件:

vim /etc/crontab

将下面的内容复制到上面文件的最后一行:

## 每天0点执行
0  0    * * *   root    /usr/sbin/logrotate /etc/logrotate.conf

其他日志配置

编辑 tomcat 日志配置文件:

vim ../apache-tomcat-8.5.69/conf/logging.properties

修改后配置文件如下:

1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.formatter =java.util.logging.SimpleFormatter
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 30
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.formatter =java.util.logging.SimpleFormatter
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 30
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

3manager.org.apache.juli.AsyncFileHandler.level = FINE
3manager.org.apache.juli.AsyncFileHandler.formatter =java.util.logging.SimpleFormatter
3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
3manager.org.apache.juli.AsyncFileHandler.maxDays = 30
3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
4host-manager.org.apache.juli.AsyncFileHandler.formatter =java.util.logging.SimpleFormatter
4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
4host-manager.org.apache.juli.AsyncFileHandler.maxDays = 30
4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

java.util.logging.ConsoleHandler.level = FINE
#java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.formatter =java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.encoding = UTF-8
java.util.logging.ConsoleHandler.limit = 1024000

# My special format:
java.util.logging.SimpleFormatter.format = %1$tF %1$tT [%4$-7s] %5$s %n
  • 自定义了的格式化器,增加时间戳
  • 只保留最近 30 天的日志文件

分享结束

你可能感兴趣的:(tomcat,tomcat,linux,java)