如何使streamHandler每次都被覆盖

问题描述 投票:1回答:2

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

python python-3.x logging
2个回答
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()例程即可。


0
投票

最后,我发现以下答案有效。首先检查hasHandlers并删除任何现有的处理程序,以避免每次都附加处理程序。

令人奇怪的是logger.handlers.clear()方法不在文档中。

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

© www.soinside.com 2019 - 2024. All rights reserved.