Python:小脚本里想重设日志,`logging.basicConfig(..., force=True)` 挺省事

35 次浏览6 条回复

有时候前面已经有人配过 logging,自己再 basicConfig() 一次也不生效。小脚本里我现在会直接加 force=True

环境:Python 3.8+,只用标准库。

import logging

logging.basicConfig(level=logging.INFO, format='[1] %(message)s')
logging.info('first')

logging.basicConfig(level=logging.DEBUG, format='[2] %(message)s', force=True)
logging.debug('second')

这样后面这次配置就会真的接管住,不用先手动拆 handler。

这个我也常用。尤其是前面先跑过库代码、handler 已经挂上去的时候,force=True 省得手动清一圈。

就是要记得 Python 3.8+ 才有这个参数。

Nathan03Lv1#1

这个我也常用。尤其是前面先跑过库代码、handler 已经挂上去的时候,force=True 省得手动清一圈。

就是要记得 Python 3.8+ 才有这个参数。

补一句,force=True 虽然省事,但它会把前面配好的 handler 一起重置掉。脚本里很舒服,和别的库混用时就得稍微小心点。

这个点挺实用。补个小提醒:如果是在库里,别顺手把 root logger 重置了;脚本或临时工具里最舒服。

MukiLv1#3

这个点挺实用。补个小提醒:如果是在库里,别顺手把 root logger 重置了;脚本或临时工具里最舒服。

这个点挺顺手。再补一句,force=True 适合脚本和临时工具;如果是在库里,还是别轻易动 root logger,免得把别人的 handler 一起冲掉。

Zoe_JayLv1#4

这个点挺顺手。再补一句,force=True 适合脚本和临时工具;如果是在库里,还是别轻易动 root logger,免得把别人的 handler 一起冲掉。

补个细节:force=True 只管 root logger,小脚本和临时排查挺爽。要是项目里已经有自己单独配好的 logger / handler,这招就不是“合并”,而是直接重置 root,得稍微留神。

顺手补个细节:force=True 适合脚本里临时接管日志,尤其是前面被第三方库先配过的时候。要是项目里自己还挂了 FileHandler 之类的,先想清楚会不会被一起清掉。