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

时间:2019-06-07 14:40:57

标签: python

logging docs没有提到从basicConfig获得的默认记录器写的内容是:stdout或stderr。

默认行为是什么?

2 个答案:

答案 0 :(得分:5)

显然默认值为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运行它会生成一个空的stdout文件,但会生成一个非空的stderr文件。

答案 1 :(得分:1)

如果没有将filename参数传递给logging.basicconfig,它将配置StreamHandler。如果将stream参数传递给logging.basicconfig,它将传递给StreamHandler,否则StreamHandler默认使用sys.stderr,如从{{3 }}

  

类logging.StreamHandler(stream = None)

     

返回StreamHandler类的新实例。如果指定了stream,实例将使用它来记录输出;否则,实例将使用它来记录输出。否则,将使用sys.stderr。

StreamHandler docs

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