Подтвердить что ты не робот

Изменение журнала "basicConfig", который уже установлен

Я использую модуль протоколирования в python как:

import logging, sys
logger= logging.getLogger(__file__)
logging.basicConfig(stream = sys.stderr, level=logging.DEBUG, format='%(filename)s:%(lineno)s %(levelname)s:%(message)s')
logger.debug("Hello World")

Теперь, после того, как я установил базовую конфигурацию на line 3, я хочу иметь аргумент командной строки, который может изменить выходной поток из sys.stderr в файл.

Я прочитал документ, и он говорит, что если оба filename и stream присутствуют одновременно, то stream игнорируется.

Теперь, я хочу знать, как изменить поток в файл после того, как я уже сделал basicConfig вещь в line 3?

4b9b3361

Ответ 1

Если вы посмотрите в источниках Python для logging/__init__.py, вы увидите, что basicConfig() устанавливает обработчики в корневом журнале, вызывая addHandler(). Если вы хотите начать с нуля, вы можете удалить все существующие обработчики, а затем снова вызвать basicConfig().

# Example to remove all root logger handlers and reconfigure. (UNTESTED)
import logging

# Remove all handlers associated with the root logger object.
for handler in logging.root.handlers[:]:
    logging.root.removeHandler(handler)

# Reconfigure logging again, this time with a file.
logging.basicConfig(filename = 'myfile.log', level=logging.DEBUG, format='%(filename)s:%(lineno)s %(levelname)s:%(message)s')