Python日志默认写入stdout还是stderr?

18
记录文档没有提到从basicConfig获得的默认记录器写入哪里:stdout 还是 stderr。

默认行为是什么?

2个回答

12
如果没有传递filename参数给logging.basicConfig,它会配置一个StreamHandler。如果向logging.basicConfig传递了一个stream参数,它将传递给StreamHandler,否则StreamHandler默认使用sys.stderr,可以在StreamHandler文档中看到。

class logging.StreamHandler(stream=None)

返回一个StreamHandler类的新实例。 如果指定了流,则该实例将使用它进行日志记录输出; 否则将使用sys.stderr。

并且源代码
class StreamHandler(Handler):
    """
    A handler class which writes logging records, appropriately formatted,
    to a stream. Note that this class does not close the stream, as
    sys.stdout or sys.stderr may be used.
    """

    def __init__(self, stream=None):
        """
        Initialize the handler.
        If stream is not specified, sys.stderr is used.
        """
        Handler.__init__(self)
        if stream is None:
            stream = sys.stderr
        self.stream = stream

9

显然默认是标准错误(stderr)。

快速检查:使用一个最小化的示例

import logging
logger = logging.getLogger(__name__)

logging.basicConfig(level=logging.INFO)
logger.info("test")

使用 python test.py 1> /tmp/log_stdout 2> /tmp/log_stderr 运行时,标准输出文件为空,但标准错误输出文件不为空。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接