как заставить streamHandler перезаписывать каждый раз - PullRequest
0 голосов
/ 03 января 2019

Я надеюсь перезаписывать предыдущую запись в журнал каждый раз, когда я запускаю приложение. Я выяснил это для FileHandler, указав режим файла 'w'. Где я могу указать подобное поведение для 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')

Я надеюсь, что консоль покажет одну строку 'test', даже если она запускается несколько раз.

Ответы [ 2 ]

0 голосов
/ 03 января 2019

В итоге я нашел следующий ответ работает. Сначала выполните проверку hasHandlers и удалите все существующие обработчики, чтобы избежать добавления обработчиков каждый раз.

Странно, что метод logger.handlers.clear () отсутствует в документации.

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

0 голосов
/ 03 января 2019

Я считаю, что лучшее, что вы можете сделать, это очистить окно консоли при каждом выполнении. Вы можете сделать это, используя эту полезную функцию ( найдена здесь ):

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() в начале вашего скрипта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...