【发布时间】:2021-10-29 20:18:03
【问题描述】:
对于log.info() 和log.error() 或log.debug(),这两个例外object (e) 或e.getMessage() 中哪个更合适。
对于不同的日志记录级别应该遵循什么/经验法则。
【问题讨论】:
标签: java exception logging slf4j
对于log.info() 和log.error() 或log.debug(),这两个例外object (e) 或e.getMessage() 中哪个更合适。
对于不同的日志记录级别应该遵循什么/经验法则。
【问题讨论】:
标签: java exception logging slf4j
这真的取决于抛出异常的原因。我也会在这里添加 WARN 级别的考虑。如果这是一个不应发生的意外错误,这意味着这是代码库的问题,您绝对应该记录整个异常对象,特别是为了获取允许开发人员更快地找到并可能修复问题的堆栈跟踪。因此,如果系统出现问题,则应将这种情况记录在 ERROR 级别,如果客户端数据出现问题,则应使用 WARN。
INFO 级别实际上不应包含异常详细信息,它应使非开发人员(例如测试人员)易于阅读信息并描述数据处理流程中最重要的部分。
我认为将异常置于 DEBUG 级别取决于您,但我仍然建议不要仅仅为了让事情更清晰或使用 e.getMessage() 来描述它。
附:一般来说,我会将这个问题重定向到this 页面,因为这是一个一般性的 SE 问题,但由于您询问了使用特定 Java 功能的问题,所以我想把事情放在正确的地方。
【讨论】:
不要尝试根据日志级别创建关于包含或不包含堆栈跟踪的固定规则。相反,在创建日志条目时,问问自己:
这将大大提高您的日志记录质量。
作为一个非常粗略的经验法则,每当您记录异常时都包含堆栈跟踪。异常意味着出现了问题,这可能涉及开发人员的分析,如果日志条目仅读取“NullPointerException”而没有提示它来自哪里,他们会非常不高兴。
在典型的日志级别中,INFO 可能不是针对开发人员的级别(因此不要求堆栈跟踪),但通常您不希望将 INFO 用于异常。
【讨论】: