首页 > 解决方案 > 在生产代码中保留 DEBUG 日志记录级别

问题描述

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

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

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

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

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

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

我的问题:

将在客户端站点上运行的生产代码置于冗长的 DEBUG 级别有什么影响?

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

标签: logging

解决方案


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

仅在需要时记录调试

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

在不涉及特定语言的实现的情况下,这里的想法是您保留In-Memory N-recent DEBUG 日志并仅在必要时将它们转储到您的记录器。这个“必要”可能是什么取决于你。未捕获的异常?另一个“错误”级别的日志?这取决于您的情况。


推荐阅读