日志记录、StreamHandler 和标准流
我不知道如何将信息级消息记录到标准输出,但将其他所有内容记录到标准错误。我已经读过这个 http://docs.python.org/library/logging.html 。有什么建议吗?
I can't figure out how to log info-level messages to stdout, but everything else to stderr. I already read this http://docs.python.org/library/logging.html. Any suggestion?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
以下脚本
log1.py
:运行时会产生以下结果。
正如您所期望的,因为在终端上
sys.stdout
和sys.stderr
是相同的。现在,让我们将 stdout 重定向到文件tmp
:因此 INFO 消息尚未打印到终端 - 但定向到
sys.stderr
的消息有< /em> 已打印。让我们看看tmp
中的内容:因此该方法似乎可以满足您的要求。
The following script,
log1.py
:when run, produces the following results.
As you'd expect, since on a terminal
sys.stdout
andsys.stderr
are the same. Now, let's redirect stdout to a file,tmp
:So the INFO message has not been printed to the terminal - but the messages directed to
sys.stderr
have been printed. Let's look at what's intmp
:So that approach appears to do what you want.
一般来说,我认为将低于
WARNING
的消息重定向到stdout是有意义的,而不仅仅是INFO
消息。根据 Vinay Sajip 的出色回答,我得出了以下结论:
Generally, I think it makes sense to redirect messages lower than
WARNING
to stdout, instead of onlyINFO
messages.Based on Vinay Sajip's excellent answer, I came up with this:
由于我的编辑被拒绝,这是我的答案。 @goncalopp 的答案很好,但并不独立或开箱即用。这是我的改进版本:
Since my edit was rejected, here's my answer. @goncalopp's answer is good but doesn't stand alone or work out of the box. Here's my improved version:
将彩色输出发送到 stderr 的最简单处理程序:
与以下方式一起使用:
或者您甚至可以将格式化程序直接应用于当前日志处理程序,而不需要
ColorStderr
:Simplest handler to send colored output to stderr:
Use with:
Or you can even apply the formatter directly to the current log handler, with no need for
ColorStderr
:这是我的答案(其他答案的组合):
Here is my answer (combination of the others):
试试这个猴子补丁~~
测试
测试输出
Try This Monkey Patch ~~
Test
Test Output