我希望每次运行应用程序时都覆盖以前的日志记录。我通过指定文件模式为“ w”来为FileHandler弄清楚。在哪里可以为StreamHandler指定类似的行为?考虑以下代码,如果多次运行,则“ test.log”将始终显示一行“ test”,而控制台将显示多行“ test”。
我尝试过冲洗方法,但是它不起作用。
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')
我希望控制台即使运行多次也能显示一行“测试”。
答案 0 :(得分:1)
我相信您最好的办法是在每次执行时清除控制台窗口。您可以使用此有用的功能(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()
例程。
答案 1 :(得分:0)
最后,我发现以下答案有效。先进行hasHandlers检查,然后删除所有现有的处理程序,以避免每次都附加处理程序。
文档中没有logger.handlers.clear()方法很奇怪。