如何使streamHandler每次都被覆盖
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使streamHandler每次都被覆盖相关的知识,希望对你有一定的参考价值。
我希望每次运行应用程序时都覆盖以前的日志记录。我通过指定文件模式为'w'来解决FileHandler问题。我在哪里可以为StreamHandler指定类似的行为?考虑以下代码,如果多次运行,'test.log'将始终显示单行'test',而控制台将显示多行'test'。
我尝试了flush方法,但它不起作用。
import logging
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
file_handler = logging.FileHandler('test.log', mode = 'w')
logger.addHandler(file_handler)
streamHandler = logging.StreamHandler()
logger.addHandler(streamHandler)
logger.info('test')
我希望即使多次运行,控制台也会显示一行'test'。
答案
我相信你能做的最好的就是在每次执行时清除控制台窗口。你可以使用这个有用的功能(found here)来做到这一点:
import os
def clear_screen():
os.system('cls' if os.name == 'nt' else 'clear')
def clear_ipython():
os.system('!cls' if os.name == 'nt' else '!clear')
只需在脚本开头调用clear_screen()
例程即可。
另一答案
最后,我发现以下答案有效。首先检查hasHandlers并删除任何现有的处理程序,以避免每次都附加处理程序。
令人奇怪的是logger.handlers.clear()方法不在文档中。
以上是关于如何使streamHandler每次都被覆盖的主要内容,如果未能解决你的问题,请参考以下文章