如何使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()方法不在文档中。

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

以上是关于如何使streamHandler每次都被覆盖的主要内容,如果未能解决你的问题,请参考以下文章

删除最小数量的顶点以使所有顶点都被隔离

如何使每次产生的随机数互不相同

如何使背景图像响应并覆盖所有区域

如何使html文件中对格式的设置优先级高于调用的css?

[AHOI2014][bzoj3876] 支线剧情 [上下界费用流]

如果任何单元测试失败,如何使 Python 的覆盖工具失败?