Logging 如何设计日志级名称。以反映使用频率?

Logging 如何设计日志级名称。以反映使用频率?,logging,Logging,我要建立一个很棒的系统。关于日志级命名的思考 让我想知道 我可以选择名字吗?这样管理员和开发人员就知道是哪个名字了 使用。不使用文档 如果日志级别也反映出它们在日志中出现的频率,那就好了 例如: 初始化/关闭-(出现一次) FUNC_调用-(出现频繁,例如在循环中) 跟踪-(在函数中多次) 现在,系统管理员永远不会在生产中打开跟踪日志记录。他可以安全地打开初始化/关闭。如果系统流量低,则调用FUNC_ 这个设计有什么问题 您会使用什么名称来反映频率 (我知道警告、信息和错误。)日志的问题是确

我要建立一个很棒的系统。关于日志级命名的思考 让我想知道

  • 我可以选择名字吗?这样管理员和开发人员就知道是哪个名字了 使用。不使用文档
  • 如果日志级别也反映出它们在日志中出现的频率,那就好了

    例如:

    • 初始化/关闭-(出现一次)
    • FUNC_调用-(出现频繁,例如在循环中)
    • 跟踪-(在函数中多次)
    现在,系统管理员永远不会在生产中打开跟踪日志记录。他可以安全地打开初始化/关闭。如果系统流量低,则调用FUNC_

    这个设计有什么问题

    您会使用什么名称来反映频率


    (我知道警告、信息和错误。)

    日志的问题是确保它们实际上不会显示太多,因为这是使系统完全停止的最可靠的方法。
    (日志文件已满,由于要生成一些复杂的日志消息,处理速度要慢得多,日志条件反复出现,…)

    然后,看起来FUNC_CALL和TRACE是预生产步骤的好名称,当您出于测试原因希望看到具体执行了什么时

    但在生产中,应该只保留与功能相关的日志(通常是关于功能特性的警告和严重日志),甚至那些日志也可能是危险的(尤其是数千个实例的循环中的警告)


    因此,实际上,无论您选择什么名称,都必须在文档中包含有助于将应用程序投入生产的确切日志级别,以及要保持活动状态的包。在log4j等现有日志框架中,严重性级别和程序中的位置是两个正交的概念


    Log4j定义了以下级别:跟踪、调试、信息、警告、错误和致命,但也可以根据完成日志的类过滤输出。

    我会使用更多的自我描述名称,如:

    • 所有东西都坏了需要立即注意
    • 罕见的重要事件(包括初始化/关闭)
    • 详细的执行跟踪
    • 吨调试信息
    也许不完全是这些,但你明白了——确保绝对不可能混淆每个日志级别的含义。(我还使用了更保守的“跟踪”术语-函数调用列表实际上是一个跟踪,因此FUNC_调用和跟踪声音是我的同义词)

    另外,请确保不要设置任何人都不应禁用的日志级别。我个人总是觉得默认的错误/警告/信息级别很愚蠢,因为它们非常容易引起误解(对不存在的项目的请求是错误吗?)

    如果没有人可以(意外地)禁用所有东西,那么这也会很好。如果没有人可以(意外地)禁用所有东西,那么这将是一个非常重要的事件级别


    不要害怕使用长名称,IDE将自动完成它们。比起乱七八糟的日志,最好使用更长的名称。

    关于日志,最重要的一点是,不应将日志编写成开发者就是读者的样子。在几乎所有情况下,日志都将由管理或操作人员读取。在许多情况下,它们将被另一个程序读取

    因此,我始终建议根据所需响应的即时性来区分日志。安德烈的日志级名字可能有点开玩笑,但这个概念在金钱上是正确的。日志级别应反映以下内容:

    • (最高)系统故障-需要立即干预
    • 可能破损,或出现问题-需要调查,并可能进行干预
    • 状态/信息报告-常规心跳或摘要统计

    最后一个有两个目的,一个是公开的,一个是微妙的。公开的目的是记录一些关于应用程序运行状况和性能的有用信息。其次,日志中的常规输出让操作员知道应用程序仍在正常运行。(也就是说,如果我看到一个日志文件在过去3小时内没有新条目,我很可能认为它已经死了。)

    为什么要尝试创建一些非标准的东西?坚持调试、警告、信息和错误。可能标准被打破了。我只是不知道何时使用警告、信息或错误。感觉不直观。我想要感觉合适的级别。我认为频率很重要。因为它会影响生产环境。忽视我的应用程序的生产状态是一种犯罪。:)我喜欢Android命名他们的一切的方式,日志级别:。