【问题标题】:Using logrotate with logback将 logrotate 与 logback 一起使用
【发布时间】:2013-10-06 23:43:29
【问题描述】:

当 logback 与 logrotate 结合使用时,推荐的配置是什么?根据调查博客等,隐式推荐配置是使用FileAppender.append=true,然后使用logrotate的copytruncate选项。

这是正确的吗?这里有我需要注意的龙吗?

【问题讨论】:

  • 为什么不用logback的RollingFileAppender
  • 我想避免我们其他基础设施的冗余,并且 logrotate 提供了其他我们需要在事后复制的本机功能。

标签: logging logback logrotate


【解决方案1】:

我不确定正确的方法是什么,因为今天早些时候我遇到这个问题只是因为我正在寻找相同的答案。

我认为这种方法可行,但是它有两个相对较小的问题(如果您甚至可以这样称呼它们):

  • 存在一个竞争条件窗口,在 logrotate 复制数据到截断数据之间,日志数据可能会丢失
  • Lo​​grotate 必须复制整个文件,与关闭/重新打开日志文件的典型 SIGHUP 方法相比,这似乎有点浪费。

在我自己的搜索中,我现在正在考虑从 FileAppender(或 Rolling one)切换到 SysLogAppender 并将 logrotate 与 rsyslog 一起使用,这两者非常自然地协同工作。再说一次,我考虑这样做的原因是因为我们的系统中有其他 python 守护程序,并且这些守护程序已经使用 rsyslog。我对切换到 SysLogAppender 的唯一保留是我不知道它如何处理异常堆栈跟踪,因为 syslog 不允许超过 1024 个字符的消息。

作为对 Martin Schroder 的 cmets 的回答,我想我想按照你的原因进行转换。这样我们所有服务的日志记录配置都以相同的方式进行配置和处理,并且具有相同的行为。

【讨论】:

  • Like minds :) 假设您知道,但为了公开记录,您可以使用 rsyslog 设置 $MaxMessageSize (rsyslog.com/doc/rsyslog_conf_global.html),SyslogAppender 最多可以处理 64k 长消息 (@987654322 @)。
  • 作为 logback SyslogAppender 的注释,它只支持 UDP 传输,不支持命名管道或 TCP。
  • 接受这个答案,因为它与问题一致,但@Jeff 的答案也会很好,这取决于您的需要。
【解决方案2】:

多年来为多个客户这样做,最受青睐的方法是使用 TimeBasedRollingPolicy,每天滚动(可以设置为任何频率)并将 MaxHistory 设置为所需的天数(通常为 30)。

虽然我喜欢并将 logrotate 用于其他日志文件,但 Logback 的内置滚动意味着我的客户不需要 logrotate。

为了跨应用/集中协调,Logback 可以包含其他 Logback 配置文件,因此您可以在文件中定义标准 appender sn-p(Logback 支持属性,因此包含文件可以根据需要定义信息)。

即使有上述情况,也可能希望 logrotate 具有 Logback 不...但是我想分享 TimeBasedRollingPolicy 以防它被忽略。

这种方法至少可以在 Logback 滚动文件上进行 logrotate 工作,避免 logrotate 在活动 Logback 日志文件上操作的潜在问题。

保持日志隔离(不要将应用程序日志混入系统日志)对于故障排除(应用程序和系统)非常有帮助 - 两者都不必处理其他人的噪音。

【讨论】:

  • 杰夫,我很欣赏这种观点。但是,如果有一条合理的路径,我的目标是运营收敛;特别是当我们也在处理包含重要数据的日志传送时;不仅仅是为了审计/调试。想法?
  • 我知道这是旧的。尽管如此,我还是想说我发现使用 TimeBasedRollingPolicy 的一个缺点。日志归运行该应用程序的同一用户所有。我不喜欢它,因为当有证据表明他或她如何设法闯入时,它为黑客提供了删除它们的途径。你不觉得吗?你知道替代方案吗?
猜你喜欢
  • 2016-05-18
  • 2019-05-21
  • 1970-01-01
  • 2013-01-30
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-09-18
  • 1970-01-01
相关资源
最近更新 更多