【问题标题】:How to deal with regular messages in Python's logging?如何处理 Python 日志中的常规消息?
【发布时间】:2019-08-07 09:48:54
【问题描述】:

Python 的logging 工具具有多个严重级别:

  • 严重
  • 错误
  • 警告*
  • 信息
  • 调试
  • 未设置

*根记录器默认为 WARNING。


在此设置中如何处理常规消息?

“常规消息”是指那些不是警告但应始终向用户显示的消息。

一个例子可以是:

遍历文件列表并对它们应用累积操作。 “常规消息”可能是“当前正在处理 {filename}”。 INFO 级别可能保存文件处理的各个子步骤的状态,用户在大多数情况下可能没有兴趣了解这些子步骤。在 WARNING 级别上可能存在潜在问题,例如两个文件包含相同键的不同条目。

我认为我想要一个介于 WARNING 和 INFO 之间的级别,可能称为 NOTICE、NOTE、REGULAR 或类似名称。这个级别将是我的默认值,而不是警告。为什么日志记录不提供这样的级别?

我知道我可以很容易地添加这样一个级别,但日志手册强烈argues against custom levels。因此,我认为必须有一种规范的方式来记录上述消息......


编辑:只是为了澄清投票结束“基于意见”:我想知道logging 是如何应该被使用到给定的一组级别和约定。因此,我认为正确的答案不一定是一种意见,而应该是使用该模块的最佳实践。

手册指出“定义您自己的级别是可能的,但不是必须的,因为现有级别是根据实践经验选择的”。在上面的示例中,我似乎缺少一个级别:要么是“常规消息”,要么——如果我切换到表示“常规消息”的 INFO——类似于用户的“详细信息”。

【问题讨论】:

  • 向用户显示的“常规消息”具有INFO 级别,而“可能保存用户可能不是的文件处理的各个子步骤的状态”的级别大部分时间都想知道”直观上是DEBUG级别。 为什么日志不提供这样的级别? 1. 因为日志级别没有严格的约定,不可能满足每个人的需求。 2. 在您的情况下,定义的级别已经足够 IMO。
  • 嗯,我还不相信。如果没有严格的约定(这显然是真的),为什么logging 对自己的约定如此严格?我知道答案是:为了让不同人编写的模块之间具有兼容性。无论如何,如果我按照您的建议将 INFO 用于用户可见消息并为开发人员使用 DEBUG,那么我现在在这两个级别之间缺少一些东西:用户的“详细信息”。最后,如果这是预期的方式,为什么 INFO 不是默认级别?

标签: python logging


【解决方案1】:

日志消息并没有真正为用户缩进。您所描述的听起来更像是常规输出。然而,至少有两种可能的方法来解决这个问题。将常规消息设为INFO 级别并将不那么有趣的消息移至DEBUG 级别,或使用log filter。引用文档:

过滤器可以被处理程序和记录器用于更复杂的 过滤不是由级别提供的。

【讨论】:

  • 你的第二句话可能正好回答了我的误解!?当您说“听起来更像常规输出”时,您的意思是我实际上应该将常规 print() 用于“常规消息”并且日志保持分开吗?
  • 如果是普通用户可以看到的输出,并且是命令行脚本,那么print 绝对适合。
  • 所以,要明确一点:你会说print 加上logging?我追求详细程度,以实现例如功能。 ssh -v, ssh -vv, ssh -vvv.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多