gpt4 book ai didi

python - 日志记录、StreamHandler 和标准流

转载 作者:IT老高 更新时间:2023-10-28 21:43:25 27 4
gpt4 key购买 nike

我不知道如何将信息级消息记录到标准输出,但其他所有信息都记录到标准错误。我已经读过这篇 http://docs.python.org/library/logging.html .有什么建议吗?

最佳答案

以下脚本,log1.py:

import logging, sys

class SingleLevelFilter(logging.Filter):
def __init__(self, passlevel, reject):
self.passlevel = passlevel
self.reject = reject

def filter(self, record):
if self.reject:
return (record.levelno != self.passlevel)
else:
return (record.levelno == self.passlevel)

h1 = logging.StreamHandler(sys.stdout)
f1 = SingleLevelFilter(logging.INFO, False)
h1.addFilter(f1)
rootLogger = logging.getLogger()
rootLogger.addHandler(h1)
h2 = logging.StreamHandler(sys.stderr)
f2 = SingleLevelFilter(logging.INFO, True)
h2.addFilter(f2)
rootLogger.addHandler(h2)
logger = logging.getLogger("my.logger")
logger.setLevel(logging.DEBUG)
logger.debug("A DEBUG message")
logger.info("An INFO message")
logger.warning("A WARNING message")
logger.error("An ERROR message")
logger.critical("A CRITICAL message")

运行时,产生以下结果。

C:\temp>log1.pyA DEBUG messageAn INFO messageA WARNING messageAn ERROR messageA CRITICAL message

正如您所料,因为在终端上 sys.stdoutsys.stderr 是相同的。现在,让我们将标准输出重定向到一个文件 tmp:

C:\temp>log1.py >tmpA DEBUG messageA WARNING messageAn ERROR messageA CRITICAL message

所以 INFO 消息没有被打印到终端 - 但是定向到 sys.stderr 的消息已经被打印了。让我们看看 tmp 里有什么:

C:\temp>type tmpAn INFO message

所以这种方法似乎可以满足您的需求。

关于python - 日志记录、StreamHandler 和标准流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1383254/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com