我正在尝试在我的Python 2.7应用程序中实现日志记录,发现它非常有用。然而,我注意到当交互式地运行Python时,每个日志消息都会打印多次。消息被打印的次数与我之前运行脚本的次数相同,因此似乎记录器在脚本结束时没有被正确清理(我猜测)。请考虑以下示例:
import sys
import logging
def main(argv=None):
log = logging.getLogger('test')
log.setLevel(logging.DEBUG)
console_handler = logging.StreamHandler()
console_handler.setFormatter(logging.Formatter("%(message)s"))
log.addHandler(console_handler)
log.info('Starting something...')
log.info('Doing something...')
log.info('Finished something.')
logging.shutdown()
if __name__=='__main__':
sys.exit(main(sys.argv[1:]))
打字
>>> import file.py
>>> file.main()
产生如下结果:
Starting something...
Doing something...
Finished something.
然后再次键入
file.main()
,结果为:Starting something...
Starting something...
Doing something...
Doing something...
Finished something.
Finished something.
如果重复三次,每个消息都会出现三次,以此类推。有人知道为什么会这样吗?这是日志模块的预期行为吗?如果是,我该如何更改?如果按照脚本方式运行(python file.py
),上述脚本只打印每个消息中的一个,与预期相符。
logging.shutdown()
的目的是删除添加到根记录器的任何处理程序。但是,现在查看了文档后才发现,它只是用于刷新和关闭任何处理程序(不是删除它们)。 - Chris