Python日志记录在stdout和stderr [duplicate]之间分割

问题描述 投票:20回答:2

是否有可能将INFO或DEBUG的python日志消息发送到stdout,并发送警告或更高级别的消息到stderr?

python logging stderr
2个回答
46
投票

这似乎可以满足我的要求:

#!/usr/bin/python
import sys
import logging


class InfoFilter(logging.Filter):
    def filter(self, rec):
        return rec.levelno in (logging.DEBUG, logging.INFO)


logger = logging.getLogger("__name__")
logger.setLevel(logging.DEBUG)

h1 = logging.StreamHandler(sys.stdout)
h1.setLevel(logging.DEBUG)
h1.addFilter(InfoFilter())
h2 = logging.StreamHandler()
h2.setLevel(logging.WARNING)

logger.addHandler(h1)
logger.addHandler(h2)

-2
投票

我认为这会有所帮助:Handler.setLevel(lvl)

将此处理程序的阈值设置为lvl。比lvl严重的日志消息将被忽略。创建处理程序时,级别设置为NOTSET(这将导致处理所有消息)。

但是现在我看到它不会做您想要的(从警告/错误中拆分信息/调试)

话虽如此,您可以编写一个自定义处理程序(例如,扩展Handler.setLevel(lvl)的类),并覆盖logging.StreamHandler方法。

© www.soinside.com 2019 - 2024. All rights reserved.