默认情况下,Python日志记录写入stdout或stderr吗?

blu*_*e10 5 python

日志文件不提什么从获得的默认记录basicConfig写入:标准输出或标准错误。

默认行为是什么?

sna*_*erb 12

如果没有filename参数传递给logging.basicconfig,它将配置一个StreamHandler. 如果stream传递一个参数,logging.basicconfig它将传递该参数,StreamHandler否则StreamHandler默认为 using,如StreamHandler 文档sys.stderr所示

类logging.StreamHandler(流=无)

返回 StreamHandler 类的新实例。如果指定了stream,实例将使用它来记录输出;否则,将使用 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
Run Code Online (Sandbox Code Playgroud)


blu*_*e10 5

显然,默认值为stderr。

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

import logging
logger = logging.getLogger(__name__)

logging.basicConfig(level=logging.INFO)
logger.info("test")
Run Code Online (Sandbox Code Playgroud)

并运行它会生成python test.py 1> /tmp/log_stdout 2> /tmp/log_stderr一个空的stdout文件,但会生成一个非空的stderr文件。