【问题标题】:Exception Standard for different logging levels不同日志记录级别的异常标准
【发布时间】:2021-10-29 20:18:03
【问题描述】:

对于log.info()log.error()log.debug(),这两个例外object (e)e.getMessage() 中哪个更合适。

对于不同的日志记录级别应该遵循什么/经验法则。

【问题讨论】:

    标签: java exception logging slf4j


    【解决方案1】:

    这真的取决于抛出异常的原因。我也会在这里添加 WARN 级别的考虑。如果这是一个不应发生的意外错误,这意味着这是代码库的问题,您绝对应该记录整个异常对象,特别是为了获取允许开发人员更快地找到并可能修复问题的堆栈跟踪。因此,如果系统出现问题,则应将这种情况记录在 ERROR 级别,如果客户端数据出现问题,则应使用 WARN。

    INFO 级别实际上不应包含异常详细信息,它应使非开发人员(例如测试人员)易于阅读信息并描述数据处理流程中最重要的部分。

    我认为将异常置于 DEBUG 级别取决于您,但我仍然建议不要仅仅为了让事情更清晰或使用 e.getMessage() 来描述它。

    附:一般来说,我会将这个问题重定向到this 页面,因为这是一个一般性的 SE 问题,但由于您询问了使用特定 Java 功能的问题,所以我想把事情放在正确的地方。

    【讨论】:

      【解决方案2】:

      不要尝试根据日志级别创建关于包含或不包含堆栈跟踪的固定规则。相反,在创建日志条目时,问问自己:

      • 谁会阅读该条目?用户、系统管理员还是开发人员?
      • 哪些信息有助于读者了解情况?添加太多信息比省略重要部分要好。
      • 如果要由开发人员阅读条目,文本是否足够,或者我应该包含堆栈跟踪吗?非开发人员在看到堆栈跟踪时通常会感到困惑,但开发人员非常欣赏它。

      这将大大提高您的日志记录质量。

      作为一个非常粗略的经验法则,每当您记录异常时都包含堆栈跟踪。异常意味着出现了问题,这可能涉及开发人员的分析,如果日志条目仅读取“NullPointerException”而没有提示它来自哪里,他们会非常不高兴。

      在典型的日志级别中,INFO 可能不是针对开发人员的级别(因此不要求堆栈跟踪),但通常您不希望将 INFO 用于异常。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-08
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多