Я хочу избежать написания кода типа logger.debug(msg, extra=self.extra)
.До сих пор я пытался сделать это двумя способами (расширение Logger и декораторы), но ни один из них не увенчался успехом.
Если я расширяю класс Logger и реализую такие методы, как debug, следующим образом:
def debug(self, msg, *args, **kwargs):
self._update_kwargs(**kwargs)
super(ExtendedLogger, self).debug(msg, *args, **kwargs)
Имя модуля / функции / номер строки, которые регистрируются, являются не сайтами вызовов ExtendedLogger.debug, а вызовом super(ExtendedLogger, self).debug(msg, *args, **kwargs)
;т.е. они всегда одинаковые значения.У меня та же проблема, если я пытаюсь реализовать нечто подобное с помощью декораторов.
Я понимаю, что это связано с вызовом findCaller
в _log
в этом файле: https://github.com/python/cpython/blob/2.7/Lib/logging/init.py (R.1284).Возможно ли зарегистрировать эти дополнительные данные, не вставляя копию Logger и слегка его настраивая?