应用场景
① Tomcat
catalina.out其实是tomcat的标准输出(stdout)和标准出错(stderr),这是在tomcat的启动脚本里指定的,如果没有修改的话stdout和stderr会重定向到这里。所以我们在应用里使用System.out打印的东西都会到这里来。另外,如果我们在应用里使用其他的日志框架,配置了向Console输出的,则也会在这里出现。
如果Tomcat的catalina.out的大小超过了2G,那么tomcat可能在没有错误提示的情况下崩溃、无法启动。所以为了避免出现这个问题,我们应该每天分割catalina.out。
② Springboot
启动脚本中输出了应用日志nohup java -jar [jvm param] xxx.jar 2 >&1 > nohup.out
,并且在logback中配置了输出到控制台,这样会导致所有的应用日志都会输出到nohup.out
。
随着时间的累计控制台日志回越来越大,我们可以从以下几点进行处理,防止出现控制台日志大量输出导致磁盘溢出。
方案
1.禁止输出到控制台中
① 删除项目中所有的system.out.print[ln]
② springboot 可以在logback/log4j中禁止输出到控制台
③ springboot启动脚本修改为 nohup java -jar [jvm param] xxx.jar 2 >&1 > /dev/null
,将进程日志输出到空文件中。
2.使用logrotate切割、压缩、删除过期文件
logrotate
是一个Linux上的日志文件轮换工具,它可以自动轮换日志文件并保留历史日志,防止磁盘被日志文件填满。
使用logrotate可以将日志文件按时间或大小等规则切割成多个文件,同时可以删除或压缩旧日志文件,避免磁盘空间占用过高。
logrotate
的配置文件通常在/etc/logrotate.conf
和/etc/logrotate.d
目录下,通过配置文件可以指定需要轮换的日志文件、轮换规则、保存历史日志的数量等参数。logrotate
可以周期性地执行轮换任务,可以手动执行logrotate
来立即轮换日志文件,也可以通过systemd
的timer
来定时执行。
总的来说,logrotate
是一个非常实用的日志处理工具,能够有效地管理Linux系统中的日志文件,保障系统的稳定运行。
简单配置样例:
首先在/etc/logrotate.d/目录创建一个tomcat文档,内容如下:
/data/apache-tomcat-9.0.13/logs/catalina.out
{
copytruncate
daily
rotate 10
compress
missingok
size 16M
}
配置说明:
compress:启用日志文件压缩。被切割的日志文件将以.gz的扩展名进行压缩保存。
delaycompress:延迟压缩。在下一次轮转周期时,才对前一个周期的日志文件进行压缩。
nocompress:禁用压缩。不对切割的日志文件进行压缩处理。
copytruncate:将当前日志文件进行备份后,截断原始日志文件,使其从头开始。通常用于不支持日志文件重新打开的程序。
nocopytruncate:禁用copytruncate选项,不进行备份和截断操作。
create:创建一个新的空日志文件,以替代被切割的日志文件。
nocreate:禁用create选项,不创建新的日志文件。
ifempty:如果日志文件为空,也进行切割。否则,不进行切割。
notifempty:只有当日志文件非空时,才进行切割。
daily:按每天为周期进行日志文件的切割。
weekly:按每周为周期进行日志文件的切割。
monthly:按每月为周期进行日志文件的切割。
yearly:按每年为周期进行日志文件的切割。
rotate count:保留的切割文件数量。默认情况下,logrotate会保留最近的count个切割文件,其他文件将被删除。
maxsize size:设置日志文件的最大大小。当日志文件达到指定的大小时,将触发切割。
minsize size:设置日志文件的最小大小。当日志文件小于指定的大小时,将不触发切割。
dateext:为每个切割文件添加日期扩展。切割文件将使用日期作为后缀。
dateformat format:自定义日期扩展的格式。可以使用%Y(年份)、%m(月份)、%d(日期)等占位符。
以上是常见的logrotate配置选项,可以根据需要进行组合和配置。配置文件通常位于/etc/logrotate.conf或/etc/logrotate.d/目录下。每个日志文件都需要一个单独的配置条目,可以在配置文件中添加多个条目来处理不同的日志文件。配置完成后,logrotate将按照指定的规则自动管理和切割日志文件。
自动切割:
每天晚上,
cron daemon
会自动执行/etc/cron.daily
目录下的任务。
这个会触发/etc/cron.daily/logrotate
文件,logrotate
一般是随linux安装的,它会执行这个命令-“/etc/sbin/logrotate /etc/logrotate.conf”(注意空格)。
/etc/logrotate.conf 包含了/etc/logrotate.d
目录下的所有脚本。这个会触发上一步写的/etc/logrotate.d/tomcat
文件。
手动切割:
执行以下语句来手动运行cron任务文章来源:https://www.toymoban.com/news/detail-562279.html
/usr/sbin/logrotate /etc/logrotate.conf
# 或
logrotate -vf /etc/logrotate.d/tomcat
3.自定义处理
可以使用Java、shell来切割,但这样存在很多风险,要考虑IO、文件权限、压缩大小、清理日期等等。既然有开源工具咱就用起来,不要重复造轮子。当然除非现有的工具已经满足不了你的需求。文章来源地址https://www.toymoban.com/news/detail-562279.html
到了这里,关于Linux 如何处理tomcat/springboot进程控制台日志的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!