linux下springboot项目nohup日志或tomcat日志切割处理方案

目录

[1. 配置流程](#1. 配置流程)

[2. 配置说明](#2. 配置说明)

其他配置选项:

[3. 测试执行](#3. 测试执行)

[4. 手动执行](#4. 手动执行)

https://juejin.cn/post/7081890486453010469

通常情况下,我们的springboot项目部署到linux服务器中,通过nohup java -jar xxx.jar &指令来进行后台运行我们的springboot项目。这种方式针对中小型项目来说,还是比较简单方便的。

  • 通过nohup运行springboot项目,默认日志输出到当前目录下的nohup.out文件中。
  • 当将springboot项目打包为war包并放入tomcat中运行,则默认日志输出到tomcat/log/catalina.out文件中。

注意:这两种方式默认的日志文件会越积越多,并且输出的是控制台日志,而不仅仅是在springboot项目中日志框架(如log4j2,logback等)配置及打印的日志,通常情况下,这样的日志记录更全面,包括异常堆栈信息,对于故障排查处理来说还是比较有效的。 然而,这样的日志输出也存在一个问题,不会自动切割备份,日志文件会随着应用程序的运行不断增大,积累到一定量时就导致排查故障、日志查询带来极大的阻碍。 如何解决这个难题呢?

  • 有人说,搭建elk来收集程序运行日志。
  • 也有人说,通过tomcat日志配置来控制日志输出,不输出到catalina.out文件中。(对tomcat运行springboot项目的方式有效) 当然,解决方案有很多种,然而我认为最简单的方式,就是通过logrotate工具来进行日志自动切割,而且像CentOS7等服务器端操作系统中都已经默认自带了该工具。像nginx、mysql等在安装时,实际上也是通过创建logrotate配置文件来进行日志切割的。

小提示:nohup.out、catalina.out日志输出时,均包含了控制台日志,建议在日志框架配置时,将日志配置输出到Console即可,而不需要配置输出到日志文件中,这样可以统一输出到nohup.out文件中进行切割。

如在log4j2配置文件中,最后的输出配置可以参考如下配置:

复制代码
<root level="info">
    <appender-ref ref="Console"/>
</root>

目前一般linux发行版都自动安装了logrotate工具,一般不需要自行安装。如果没有自带,可以使用yum等命令进行安装。

1. 配置流程

在/etc/logrotate.d/目录下创建一个文件,如tomcat_catalina,写入以下内容:

创建文件并写入内容:

创建文件:

复制代码
vim /etc/logrotate.d/tomcat_logrotate                  

写入内容:

|-------------------------|----------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 | /home/app/tomcat/logs/catalina``.out { daily rotate 180 missingok dateext #compress notifempty copytruncate } |

2. 配置说明

|-------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 | /home/app/tomcat/logs/catalina``.out ``#服务器中catalina.out存放地址 ``daily ``#每天切割 ``rotate 180 ``#保留最多180个文件 ``missingok ``#文件丢失了,继续切割而不报错 ``dateext ``# 这个参数很重要!就是切割后的日志文件以当前日期YYYYMMDD为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即xxx.log-1这种格式 ``#compress #压缩分割后的文件 ``notifempty ``# 当日志文件为空时,不进行轮转,与 ifempty 相反 ``copytruncate ``#拷贝原日志文件,并将其大小变为0 ``#size 200M #当catalina.out文件大于200M时,就切割 |

其他配置选项:

|-------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | daily :指定转储周期为每天 weekly :指定转储周期为每周 monthly :指定转储周期为每月 rotate count :指定日志文件删除之前转储的次数,0 指没有备份,5 指保留 5 个备份 tabooext [+] list:让 logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, ``v``, 和~ missingok:在日志轮循期间,任何错误将被忽略,例如 "文件无法找到" 之类的错误。 size size:当日志文件到达指定的大小时才转储,bytes (缺省) 及 KB (sizek) 或 MB (sizem) compress: 通过 ``gzip 压缩转储以后的日志 nocompress: 不压缩 copytruncate:用于还在打开中的日志文件,把当前日志备份并截断 nocopytruncate: 备份日志文件但是不截断 create mode owner group : 转储文件,使用指定的文件模式创建新的日志文件 nocreate: 不建立新的日志文件 delaycompress: 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 nodelaycompress: 覆盖 delaycompress 选项,转储同时压缩。 errors address : 专储时的错误信息发送到指定的 Email 地址 ifempty :即使是空文件也转储,这个是 logrotate 的缺省选项。 notifempty :如果是空文件的话,不转储 mail address : 把转储的日志文件发送到指定的 E-mail 地址 nomail : 转储时不发送日志文件 prerotate``/endscript``: 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行 |

3. 测试执行

使用以下命令,可以测试执行切割任务。

|---|--------------------------------------------------------|
| 1 | logrotate -d ``/etc/logrotate``.d``/tomcat_logrotate |

-d 以预演方式运行 logrotate,不用实际轮训任何日志文件,模拟演练日志轮询并显示输出 -v 显示打印详细信息,相当于debug模式

4. 手动执行

使用以下命令,可以手动执行切割任务。

|---|--------------------------------------------------------|
| 1 | logrotate -f ``/etc/logrotate``.d``/tomcat_logrotate |

-f 强制执行一次

问题遗留:

每次执行之后都会在首行产生一行乱码,这个有待研究,已解决的道友可以留言

相关推荐
正在努力的小河1 小时前
Linux设备树简介
linux·运维·服务器
荣光波比1 小时前
Linux(十一)——LVM磁盘配额整理
linux·运维·云计算
小张快跑。1 小时前
Tomcat下载、安装及配置详细教程
java·服务器·tomcat
LLLLYYYRRRRRTT1 小时前
WordPress (LNMP 架构) 一键部署 Playbook
linux·架构·ansible·mariadb
轻松Ai享生活2 小时前
crash 进程分析流程图
linux
悟纤2 小时前
Spring Boot 实用小技巧:多级缓存(Caffeine + Redis)- 第545篇
spring boot·后端·spring
MrSYJ2 小时前
UserDetailService是在什么环节生效的,为什么自定义之后就能被识别
java·spring boot·后端
大路谈数字化3 小时前
Centos中内存CPU硬盘的查询
linux·运维·centos
luoqice4 小时前
linux下查看 UDP Server 端口的启用情况
linux
Noii.4 小时前
Spring Boot初级概念及自动配置原理
java·spring boot·后端