在生产代码中保留 DEBUG 日志记录级别

cru*_*vid 2 logging

过去,我的客户会打电话告诉我他们的软件出现了问题。我会登录该网站,然后查看错误日志。

但是,我发现错误日志倾向于解释发生了什么错误,而不是解释为什么发生错误。要了解导致问题的原因,需要以前的状态信息,这些信息仅包含在 DEBUG 日志中。

因此,几乎每次,我都必须更改日志级别,重新启动软件,并花费大量时间尝试重现问题。

我决定让生产代码在 DEBUG 日志级别运行,但进行了一项调整:我将最大日志大小限制journald.conf为 10GB。在 500GB 的机器上,这对我来说似乎很好。

现在我可以使用journalctl --sincejournalctl --until将巨大的日志过滤到我的客户说发生错误的时间段。

现在,当问题出现时,我不会浪费时间重新创建问题。

我的问题:

让生产代码在客户端站点上以详细 DEBUG 级别运行会产生什么影响?

我发现这里的答案不够充分: 生产中的日志级别

Mik*_*ail 9

正如马修指出的那样,最大的问题是性能和噪音。那么该怎么办?

仅在需要时记录调试

在生产环境中记录 DEBUG 日志有三种主要方法。我最喜欢的模式之一是让您的代码始终跟踪调试日志,但在发生错误之前不实际记录它们。这称为事件驱动调试日志,其工作原理如下:

在不讨论特定于语言的实现的情况下,这里的想法是保留内存中的N-最近的调试日志,并仅在必要时将它们转储到记录器。这个“必要”可能是什么取决于您。未捕获的异常?另一个“错误”级别的日志?这取决于你的场景。