【问题标题】:Why Python logging writes to stderr by default?为什么 Python 日志默认写入 stderr?
【发布时间】:2019-11-21 17:26:16
【问题描述】:

Does Python logging write to stdout or stderr by default? 相关,但我想知道为什么它默认为stderrWHAT 是默认值。

对我来说,为什么stderr 是默认值并不是很明显。我注意到当我运行python script.py | tee out.log 时出现问题并最终得到空日志文件。现在我知道它可以通过python script.py 2>&1 | tee out.log 或使用stream 参数来解决:

logging.basicConfig(stream=sys.stdout)

在那次事件之后,我将每个脚本中的默认stream 更改为stdout 似乎是合理的,以避免再次感到惊讶。这是一个好习惯吗?我会错过什么吗?

【问题讨论】:

  • 如果我冒险猜测,那是因为日志记录不被认为是程序的输出,而是有点像程序正在执行的“运行评论”。就像导演的评论不会合并到 DVD 上的默认音频流中一样,日志记录也与标准输出分开,这样它就不会干扰节目的输出;如果您想将某些内容打印到标准输出,请打印它,不要记录它。但是,这类问题只能由最初实现它的人来权威地回答,所以它不太适合 Stack Overflow。
  • @Amadan 我发现您的评论信息量最大,如果这是一个实际的答案,我会接受它。

标签: python logging default stderr


【解决方案1】:

您可能不想将默认值更改为标准输出。 原因是 stderr 旨在输出所有消息,这些消息只是一些内部和/或调试程序信息,如日志和错误,而不是实际输出,即程序的结果。

【讨论】:

    【解决方案2】:

    计算机程序基本上将数据作为输入并创建数据作为输出。 在程序运行时,可以通过监视通知其操作,而无需更改其输出数据。为此,计算机程序通常有两种输出,一种用于数据的标准输出,另一种用于监控(记录和错误):stderr。

    这在您的程序可管道化时特别有用:例如,您不会在视频像素之间出现错误消息,因为它会破坏您的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2020-08-16
      • 2019-12-08
      • 1970-01-01
      相关资源
      最近更新 更多