ICE.ICE|

韩憨

园龄:4年7个月粉丝:42关注:47

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

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
#endscript
#size 200M
}

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 -f /etc/logrotate.d/tomcat_logrotate

可选参数:

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

4. 自定义执行时间

logrotate默认的执行时间不是凌晨0点,Logrotate是基于CRON来运行的,其脚本是/etc/cron.daily/logrotate,实际运行时,Logrotate会调用配置文件/etc/logrotate.conf。这个时间是由CRON控制的,具体可以查询CRON的配置文件/etc/anacrontab(老版本的文件是/etc/crontab),一般默认是3:2:2+(4,45)这个时间段执行。

/etc/anacrontab文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# /etc/anacrontab: configuration file for anacron
 
# See anacron(8) and anacrontab(5) for details.
 
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
 
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly
~

如果想要自己指定时间执行,可简单借助crontab自定义执行即可。

(1)tomcat_logrotate文件从/etc/logrotate.d/中移出来,放到其他目录,如:/home/logrotate/下

(2)crontab添加定时任务执行:crontab -e。如每天23:59分进行切割

1
59  23 * * *  /usr/sbin/logrotate  /home/logrotate/tomcat_logrotate

本文作者:韩憨

本文链接:https://www.cnblogs.com/hanby/p/18150703

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   韩憨  阅读(606)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
//看板娘

剑桥

点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起
  1. 1 隔离 (Studio Live Duet) 陈凯咏,林家谦
  2. 2 明知做戏 吴雨霏
  3. 3 残酷游戏 卫兰
  4. 4 你,好不好? 周兴哲
  5. 5 我可以 蔡旻佑
  6. 6 云烟成雨 房东的猫
  7. 7 说散就散 JC 陈咏桐
  8. 8 我配不上你 夏天Alex
  9. 9 不再联系 夏天Alex
  10. 10 等我先说 夏天Alex
  11. 11 我知道他爱你 夏天Alex
  12. 12 多想在平庸的生活拥抱你 隔壁老樊
  13. 13 这一生关于你的风景 隔壁老樊
  14. 14 我曾 隔壁老樊
  15. 15 关于孤独我想说的话 隔壁老樊
  16. 16 过客 周思涵
  17. 17 备爱 周思涵
  18. 18 嚣张 en
  19. 19 海口 后弦
我可以 - 蔡旻佑
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

寄 没有地址的信

这样的情绪 有种距离

你 放着谁的歌曲

你 放着谁的歌曲

是怎样的心情

能不能说给我听

雨 下得好安静

是不是你偷偷在哭泣

幸福 真的不容易

在你的背景 有我爱你~

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

寄 没有地址的信

寄 没有地址的信

这样的情绪 有种距离

你 放着谁的歌曲

是怎样的心情

能不能说给我听

雨 下得好安静

是不是你偷偷在哭泣

幸福 它真的不容易

在你的背景 有我爱你~

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

我可以 陪你去看星星

我可以 陪你去看星星

不用再多说明

我就要和你在一起

我不想 又再一次和你分离

我多么想每一次的美丽

是因为你

He...

He...