虽说 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() 来配置:
|
12345
|
logging.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 \'\’, mode \’w\’ at 0x1089cb270> |
可以如下分别配置:
|
123456789
|
ng.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() 来配置:
|
12345
|
logging.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 \'\’, mode \’w\’ at 0x1089cb270> |
可以如下分别配置:
|
123456789
|
0309096-3\”>>>> logging.basicConfig(level=logging.NOTSET) |
|