Spring Boot服务中的日志轮换

时间:2018-02-08 09:27:31

标签: java linux logrotate

我将Spring Boot 2.0.0-RC1应用程序部署为init.d service,但我无法弄清楚如何配置日志轮换。 该应用程序记录到/var/log/appname.log,但如果我配置logrotate,则日志记录在轮换后停止,因为创建了一个新文件,并且嵌入式脚本中定义的stdout / stderr重定向不再起作用。

如果我在日志系统中配置日志轮换有两个问题:我无法在/ var / log中创建文件,我仍然在嵌入式脚本中定义了重定向。

对此有什么合适的解决方案?

2 个答案:

答案 0 :(得分:2)

我找到了解决方案,它是logrotate copytruncate 的选项。

答案 1 :(得分:2)

我在几个应用程序中遇到同样的问题,并且添加copytruncate param是解决方案,因为您的Spring Boot应用程序不理解文件已更改(截断)并且表现得像{{1} }命令(有关详细信息,请参阅How does the “tail” command's “-f” parameter work?。)

示例:

tail -f
  

copytruncate

     

在创建副本后将原始日志文件截断为零大小,而不是移动旧日志文件并选择创建新日志文件。当某些程序无法被告知关闭其日志文件时可以使用它,因此可以继续永久地写入(追加)到前一个日志文件。   请注意,复制文件和截断文件之间的时间片非常小,因此某些日志记录数据可能会丢失。使用此选项时, create 选项将不会像旧日志一样生效   文件保持原位