我应该将消息记录到stderr或stdout吗?

52 logging error-logging stream

我有一个我写的程序,我想编写一个自定义日志记录工具(例如诊断,通知,警告,错误).

我应该使用stdoutstderr流来执行此操作吗?它是各种解释器,用户可以要求它打印输出.

编辑:请停止推荐我记录框架:(

Jak*_*kob 41

常规输出(运行程序的实际结果)应该继续stdout,就像你提到的那样(例如诊断,通知,警告,错误)stderr.

如果没有"常规输出",我会说你选择哪一个并不重要.您可能会认为日志记录是唯一的输出,所以应该去stdout.或者你可以说它仍然是"特殊信息"应该去的stderr.


And*_*nov 12

你还写别的stdout吗?如果答案是,Yes那么有人可能很难区分正常流和用于重定向的文件中间的错误stdout.

如果stdout将用作另一个程序的输入怎么办?它能够解析这个调试信息吗?在这种情况下,最好只写出关键错误stderr.如果您需要编写其他内容,可以考虑写入其他日志文件.


Pau*_*per 8

标准输出是程序的“输出”或“结果”。(这就是为什么 shell 管道适用于 stdout。)

Stderr 是程序的“日志记录”或“诊断”。(这就是为什么 stderr 通常是无缓冲的。)

听起来这些消息应该是后者。

  • +1 用于缓冲考虑。尽快保存错误很重要,特别是如果它们很少发生,因此可能很长时间都不会被刷新 (2认同)