代码之家  ›  专栏  ›  技术社区  ›  anoneemus

python调试记录器未出现在控制台中

  •  1
  • anoneemus  · 技术社区  · 8 年前

    这让我发疯,我有以下剧本:

    #!/usr/bin/env python3
    
    
    import logging
    
    
    logger = logging.getLogger()
    logger.setLevel(logging.DEBUG)
    
    print(logger.getEffectiveLevel())
    print(logger.isEnabledFor(logging.DEBUG))
    logger.debug("test") #???
    

    运行时,输出以下内容:

    10
    True
    

    为什么我的 logger.debug 声明做什么????

    1 回复  |  直到 8 年前
        1
  •  1
  •   wim    8 年前

    因为您没有配置任何处理程序。如果没有配置处理程序,日志事件将不起作用。当没有配置任何处理程序时,如果看到警告或以上的事件,但您的事件只是在调试时,则根日志记录器会自动添加一个处理程序。

    试试这个:

    >>> import logging
    >>> logger = logging.getLogger()  # this is the root logger
    >>> logger.handlers
    []
    >>> logging.basicConfig(level=logging.DEBUG)
    >>> logger.handlers
    [<StreamHandler <stderr> (NOTSET)>]
    >>> logger.debug('test')
    DEBUG:root:test
    

    基本配置将添加 StreamHandler 写信给 sys.stderr 如果您不另外指定。

    在这一点上,我邀请你考虑 a 3rd-party logging framework 比stdlib日志记录更合理的默认值。

    >>> import structlog
    >>> logger = structlog.get_logger()
    >>> logger.debug("test message", key1='val1', key2='val2')
    2018-07-23 13:13.28 test message                   key1=val1 key2=val2