2012-05-31 3 views
1

Я работаю с приложением, где почти каждый модуль и каждый класс испускают сообщения logging.Перехват всех сообщений регистрации

Мне нужен способ захватить каждое из этих сообщений без явного прикрепления обработчика через .addHandler() к каждому экземпляру журнала (это то, что я делаю прямо сейчас).

Есть ли способ подключить обработчик к каждые регистрационный экземпляр сразу?

ответ

3

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

Для доступа к корневому журналу используйте logging.getLogger().

+0

Каждый регистратор инициализируется так: 'регистратора = logging.getLogger («LoggerNameWithoutPeriods»)' , Я не могу найти иерархию в них, потому что они все на верхнем уровне. – Blender

+0

@Blender: Там все еще есть корневой регистратор. 'logging.getLogger()' возвращает его. – icktoofay

+0

Да, это так. Благодаря! – Blender

1

Для того, чтобы войти все на стандартный вывод вы можете использовать метод logging.basicConfig для инициализации конфигурации протоколирования:

logging.basicConfig(level=logging.DEBUG, stream=sys.stdout) 
+0

Я буду использовать 'stream = sys.stdout', так что спасибо! – Blender

Смежные вопросы