如何使streamHandler每次都覆盖

时间:2019-01-02 22:20:57

标签: python python-3.x logging

我希望每次运行应用程序时都覆盖以前的日志记录。我通过指定文件模式为“ 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')

我希望控制台即使运行多次也能显示一行“测试”。

2 个答案:

答案 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()方法很奇怪。

  

https://stackoverflow.com/a/44049484/6442398