刚才写程序的时候拷贝了一个函数进来,结果整个程序的日志都不打印了。分析了一下,发现这是 Python 的一个坑。
下面这三行代码执行后不会显示任何东西。
logging.debug("AAAA")
logging.basicConfig(level=logging.DEBUG)
logging.debug("BBBB")
但如果把第一行代码删掉,那么第三行的 logging.debug 就可以正常工作。
这是因为如果不执行 logging.basicConfig() 而直接调用 logging.debug() 会以 logging.WARNING 为 level 自动创建默认 handler。既然是以 logging.WARNING 为 level,那么第一个 logging.debug() 自然不会输出内容。
然而,因为 logging.basicConfig() 不能覆盖已经存在的 level,所以第三行的 logging.debug() 也不会输出内容。
为稳妥起见,在调用 logging.basicConfig() 之前应先清理掉可能存在的 handler:
logging.getLogger().handlers.clear()
logging.basicConfig(level=logging.DEBUG)