日志级别是否有近乎共识的准则?

时间:2011-05-15 22:45:02

标签: c# java logging

我受到了我和我的团队在我最近两家公司使用的日志级别的影响。我会在这里分享我们的,但请记住这一点是主观的:

  • 致命 - 你的应用程序正在崩溃。
  • 错误 - 此操作或线程崩溃并烧毁。该应用程序可能会继续。
  • 警告 - 当前的操作可能会继续,但工程师需要调查一些事情。
  • 信息 - 解释您的操作正在做什么。
  • 调试 - 可能变得非常垃圾的操作说明(内部循环等)。

现在,我的客观问题是在这方面是否存在高度一致的风格。答案可能是否定的。但如果有这样的标准,你能指出一个URL吗?

另请注意,我并不关心实际配置什么阈值来记录部署/生产环境中有用的地方。相反,我的问题仅限于我们这些编写代码的人应该使用的指南。

我在我的问题上放了一个C#标签和Java标签。我们可能在这两个阵营中有不同的指导方针,但可能只有文化原因我们不同,而不是概念上的原因。

4 个答案:

答案 0 :(得分:3)

来自SSCLI(.NET源代码):

namespace System {
    ...
    [Serializable]
    internal enum LogLevel {
        Trace  = 0,
        Status = 20,
        Warning= 40,
        Error  = 50,
        Panic  = 100,
    }
    ...
}

注意[警告]值)我依靠这种分布变体。无论如何,这是微软)

答案 1 :(得分:3)

我甚至不确定某些事情是否“高度同意”可以客观地回答。

Log4jLog4Net库肯定会使用您所描述的级别定义。请参阅this link

有人可能会生成一个使用不同定义的日志记录级别的库的反例。

答案 2 :(得分:1)

我所知道的并没有“高度一致”的标准,风格或建议。但是,Java的每个主流日志记录子系统都有一组与您已识别的5对应的级别。实际上,这些级别在实践中已经很好地对齐,因此可以使用SLF4J外观“统一”日志记录。 (我想你可以说这使得SLF4J levels成为Java的首选样式。)

我想补充几点:

  • 关于工程师在响应日志事件时可以做什么和应该做什么的建议超出了描述日志事件的含义范围。

  • 这些类别必然是主观的,但使用“崩溃和焚烧”等语言会导致误解。

  • 在实践中,使用可能与事实风格不一致;例如一些日志记录系统允许您使用其他(非清单)级别,开发人员可能会将事件记录在“错误”级别。


请注意,slf4j 1.4增加了对TRACE级别的支持。

答案 3 :(得分:0)

以为我会从Python日志记录工具中添加级别:

DEBUG - 详细信息,通常仅在诊断问题时才有意义。

信息 - 确认事情按预期工作。

警告 - 表示发生了意外情况,或在不久的将来发现某些问题(例如“磁盘空间不足”)。该软件仍在按预期工作。

错误 - 由于更严重的问题,该软件无法执行某些功能。

CRITICAL - 严重错误,表示程序本身可能无法继续运行。

这些可以在这里找到: http://docs.python.org/howto/logging.html#logging-basic-tutorial