logging - 在生产代码中保留 DEBUG 日志记录级别
问题描述
过去,我的客户会打电话告诉我他们的软件出现问题。我会登录到该站点,然后查看错误日志。
但是,我发现错误日志倾向于解释发生了什么错误,而不是为什么发生错误。要了解导致问题的原因需要以前的状态信息,这些信息仅包含在 DEBUG 日志中。
所以几乎每次,我都必须更改日志级别,重新启动软件,并花费大量时间尝试重新创建问题。
我决定让生产代码在 DEBUG 日志级别运行,但进行了一项调整:我将最大日志大小限制journald.conf
为 10GB。在 500GB 的机器上,这对我来说似乎很好。
现在我可以使用journalctl --since
andjournalctl --until
将巨大的日志过滤到我的客户说发生错误的时间段。
现在,当问题出现时,我不会浪费时间重新创建问题。
我的问题:
将在客户端站点上运行的生产代码置于冗长的 DEBUG 级别有什么影响?
我发现这里的答案不够充分: 生产中的日志级别
解决方案
正如马修指出的那样,最大的问题是性能和噪音。那么该怎么办?
仅在需要时记录调试
在生产环境中记录 DEBUG 日志有三种主要方法。我最喜欢的模式之一是让您的代码始终跟踪调试日志,但在发生错误之前不会实际记录它们。这称为事件驱动调试日志,它的工作原理如下:
在不涉及特定语言的实现的情况下,这里的想法是您保留In-Memory N-recent DEBUG 日志并仅在必要时将它们转储到您的记录器。这个“必要”可能是什么取决于你。未捕获的异常?另一个“错误”级别的日志?这取决于您的情况。
推荐阅读
- python - 无法确定关系 Product.collections 上的父/子表之间的连接条件
- python - 如何修复 405 Method Not Allowed Flask 错误?
- python - CEFPython 无法嵌入到 pyqt5 应用程序中
- css - 在 React 中访问父目录
- c# - 如何将全局 MongoDB 连接字符串添加到 C# 项目
- reactjs - react-window resetAfterIndex 不维护列的状态
- python - suit_form_tabs 在 Django-Admin 中不起作用
- jestjs - 执行 resetModules 和动态导入时调用真实函数而不是 mock
- c - 初学者问题:for循环没有按预期工作
- arduino - esp8266 软AP显示错误名称