Linux 如何处理tomcat/springboot进程控制台日志

目录

    • 应用场景
    • 方案

应用场景

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来立即轮换日志文件,也可以通过systemdtimer来定时执行。
总的来说,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任务

/usr/sbin/logrotate /etc/logrotate.conf
# 或
logrotate -vf /etc/logrotate.d/tomcat 

3.自定义处理
可以使用Java、shell来切割,但这样存在很多风险,要考虑IO、文件权限、压缩大小、清理日期等等。既然有开源工具咱就用起来,不要重复造轮子。当然除非现有的工具已经满足不了你的需求。

你可能感兴趣的:(Linux,日志,linux,tomcat,spring,boot)