Как полностью сбросить модуль ведения журнала Python stdlib в сеансе ipython?

я хотел бы делать повторные вызовы скриптов Python, используя% run в сеансе ipython, и для каждого из этих сценариев для регистрации на основе аргументов cmdline, переданных через% run.

Например, при отладке cmd.py я мог бы со временем захотеть запустить:

%run cmd.py
... logs with default behavior, e.g. to STDERR with root level WARN

%run cmd.py --log_level DEBUG --log_file /tmp/cmd.out
... logs with root level DEBUG to a file

%run cmd.py --log_level ERROR

К сожалению, это сложно, потому что состояние регистрации создается путем регистрации. basicConfig сохраняется после первой команды% run (что чаще всего справедливо для всех модулей и часто желательно при использовании% run).

Я понимаю, что в общем случае серия команд% run, подобных приведенной выше, не будет такой же, как запуск каждой команды в новом процессе. Однако было бы очень удобно, если бы такие вещи, как log_level и log_file, можно было бы повторно инициализировать.

Я пробовал что-то подобное в cmd.py:[1226 sizes, и logging_config.py делает (в сжатом виде):

if logging_initialized:
    logging.getLogger().setLevel(lvl)
else:
    logging.basicConfig(level=lvl)
    logging_initialized = True

Это работает для простых случаев, но не, если cmd.py импортирует библиотеки, которые также используют ведение журнала. Еще я экспериментировал с ведением журнала. shutdown () (вызывается при завершении каждого cmd.py), но, похоже, это не помогает.

6
задан Joe Hastings 17 April 2011 в 02:55
поделиться