如何使用Python的日志记录模块将调试模式作为选项启用

时间:2015-02-02 18:16:08

标签: python

假设我将--debug的参数传递给我的脚本,我希望它显示其他文本,否则默认情况下不显示它。

这里要保持简单。如何让logger.debug显示/记录?如果传递--debug,它只是“启用”吗?

import logging
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

fh = logging.FileHandler('xyz.log')
fh.setLevel(logging.INFO)
fh.setFormatter(formatter)
logger.addHandler(fh)

logger.error("This is an error")
logger.info("Info 123")
logger.debug("FYI, here's what you don't see unless you enable me.")

也许?

fh.setLevel(logging.DEBUG)
if option == 'debug'
    logger.debug("FYI, here's what you don't see unless you enable me.")

3 个答案:

答案 0 :(得分:4)

Python日志系统非常复杂,在访谈中值得提问。

logger = logging.getLogger(__name__)
logger.debug("FYI, here's what you don't see unless you enable me.")

要查看该消息,请说,您需要控制台:

  1. 启用当前模块的记录器(请参阅代码中的__name__)或某些级别DEBUG的父记录器(例如根记录器)。
  2. stdout的处理程序附加到当前模块或其某些级别DEBUG的父级的记录器。
  3. 使用dictConfig可以更轻松地设置日志记录配置:

    import logging.config
    
    
    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'formatters': {
            'simple': {
                'format': '%(levelname)s: %(message)s'
            },
        },
        'handlers': {
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            '': {
                'level': 'DEBUG',
                'handlers': ['console'],
            },
        },
    }
    
    
    logging.config.dictConfig(LOGGING)
    
    logging.getLogger(__name__).debug('This is a debug message')
    

    在上面的示例中,您将在控制台中看到该消息。

    但是如果您将根记录器或控制台处理程序的级别更改为INFO - 您将看不到该消息。

    将日志记录配置保存在一个独立的,依赖于环境的文件中。

    在摆弄日志记录配置时,请参阅一个非常有用的包:http://rhodesmill.org/brandon/2012/logging_tree/

答案 1 :(得分:2)

fh = logging.FileHandler('xyz.log')
fh.setLevel(logging.DEBUG if option == 'debug' else logging.INFO)    
fh.setFormatter(formatter)
logger.addHandler(fh)

要处理传递给脚本的参数,您可以使用诸如argparsedocopt之类的群库之一。

答案 2 :(得分:2)

它正在显示记录logger.info,因为它是您使用fh.setLevel(logging.INFO)设置的记录。根据选项,使用fh.setLevel(logging.DEBUG)注册logger.debug个电话或两者。如果要保持INFODEBUG分开,您还可以拥有多个Filehandler。请记住,您的日志存储在xyz.log中 - 如果您想在运行时调用logger.disabled = True期间停止记录。