虽说 logging 模块都用了好久了,不过由于文档不够详细,每次都忍不住去搜索别人的文章,于是就干脆记录下来吧。
懒得分段了,想到哪写到哪吧。
- 为什么 logging.info() 默认不输出任何东西?
因为默认生成的 root logger 的 level 是 logging.WARNING,低于该级别的就不输出了。可以进行如下设置来输出:
12345678910>>> import logging>>> logging.info('test')>>> root_logger = logging.getLogger() # 或使用未公开的 logging.root>>> root_logger.level30>>> logging.getLevelName(30)'WARNING'>>> root_logger.level = logging.NOTSET>>> logging.info('test')INFO:root:test
如果还没配置 handler 的话,可以用 logging.basicConfig() 来配置:
1234567>>> root_logger.handlers[]>>> logging.basicConfig(level=logging.NOTSET)>>> root_logger.handlers[<logging.StreamHandler object at 0x108becd10>]>>> logging.info('test')INFO:root:test
- 如何定制输出的格式?
给 logger 的 handler 设置一个 logging.Formatter 对象:
1234567891011>>> root_logger.handlers[0].formatter.format<bound method Formatter.format of <logging.Formatter object at 0x10c062d90>>>>> root_logger.handlers[0].formatter.datefmt>>> root_logger.handlers[0].formatter._fmt'%(levelname)s:%(name)s:%(message)s'>>> LOGGING_FORMAT = '[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(message)s'>>> DATE_FORMAT = '%y%m%d %H:%M:%S'>>> formatter = logging.Formatter(LOGGING_FORMAT, DATE_FORMAT)>>> root_logger.handlers[0].formatter = formatter>>> logging.info('test')[I 130221 01:58:28 <stdin>:1] test
如果还没配置 handler 的话,可以用 logging.basicConfig() 来配置:
12345logging.basicConfig(level=logging.NOTSET,format=LOGGING_FORMAT,datefmt=DATE_FORMAT)
详细的格式介绍就查看文档吧。 - 为什么我重定向了 stdout,但是却看不到输出?
因为默认生成的 root logger 的 handler 的 stream 是 stderr,不是 stdout:
12>>> root_logger.handlers[0].stream<open file '<stderr>', mode 'w' at 0x1089cb270>
可以如下分别配置:
123456789ng.info() 默认不输出任何东西?
因为默认生成的 root logger 的 level 是 logging.WARNING,低于该级别的就不输出了。可以进行如下设置来输出:
12345678910>>> import logging>>> logging.info('test')>>> root_logger = logging.getLogger() # 或使用未公开的 logging.root>>> root_logger.level30>>> logging.getLevelName(30)'WARNING'>>> root_logger.level = logging.NOTSET>>> logging.info('test')INFO:root:test
如果还没配置 handler 的话,可以用 logging.basicConfig() 来配置:
1234567>>> root_logger.handlers[]>>> logging.basicConfig(level=logging.NOTSET)>>> root_logger.handlers[<logging.StreamHandler object at 0x108becd10>]>>> logging.info('test')INFO:root:test
- 如何定制输出的格式?
给 logger 的 handler 设置一个 logging.Formatter 对象:
1234567891011>>> root_logger.handlers[0].formatter.format<bound method Formatter.format of <logging.Formatter object at 0x10c062d90>>>>> root_logger.handlers[0].formatter.datefmt>>> root_logger.handlers[0].formatter._fmt'%(levelname)s:%(name)s:%(message)s'>>> LOGGING_FORMAT = '[%(levelname)1.1s %(asctime)s %(module)s:%(lineno)d] %(message)s'>>> DATE_FORMAT = '%y%m%d %H:%M:%S'>>> formatter = logging.Formatter(LOGGING_FORMAT, DATE_FORMAT)>>> root_logger.handlers[0].formatter = formatter>>> logging.info('test')[I 130221 01:58:28 <stdin>:1] test
如果还没配置 handler 的话,可以用 logging.basicConfig() 来配置:
12345logging.basicConfig(level=logging.NOTSET,format=LOGGING_FORMAT,datefmt=DATE_FORMAT)
详细的格式介绍就查看文档吧。- 为什么我重定向了 stdout,但是却看不到输出?
因为默认生成的 root logger 的 handler 的 stream 是 stderr,不是 stdout:
12>>> root_logger.handlers[0].stream<open file '<stderr>', mode 'w' at 0x1089cb270>
可以如下分别配置:
1234567890309096-3">>>> logging.basicConfig(level=logging.NOTSET) - 如何定制输出的格式?