我不知道如何将信息级别的消息记录到stdout,但将其他所有内容记录到stderr。我已经阅读了http://docs.python.org/library/logging.html。有什么建议吗?
以下脚本log1.py:
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.py 调试消息 INFO消息 警告消息 错误消息 关键信息
正如你所期望的,因为在终端上sys.stdout,并sys.stderr是相同的。现在,让我们将标准输出重定向到文件tmp:
sys.stdout
sys.stderr
tmp
C:\ temp> log1.py> tmp 调试消息 警告消息 错误消息 关键信息
因此,INFO消息没有被打印到终端-但指示消息sys.stderr 已 被打印。让我们看一下其中的内容tmp:
C:\ temp>输入tmp INFO消息
So that approach appears to do what you want.