Я обычно не использую или не нахожу необходимость в регистраторах уровня класса, но я держу свои модули максимум в нескольких классах. Простое:
import logging
LOG = logging.getLogger(__name__)
В верхней части модуля и далее:
LOG.info('Spam and eggs are tasty!')
из любого места в файле обычно приводит меня туда, где я хочу быть. Это исключает необходимость повсеместного использования self.log
, что, как правило, беспокоит меня с точки зрения «ставь все в каждый класс» и приближает меня на 5 символов к 79 подходящим символам.
Вы всегда можете использовать псевдокласс-декоратор:
>>> import logging
>>> class Foo(object):
... def __init__(self):
... self.log.info('Meh')
...
>>> def logged_class(cls):
... cls.log = logging.getLogger('{0}.{1}'.format(__name__, cls.__name__))
...
>>> logged_class(Foo)
>>> logging.basicConfig(level=logging.DEBUG)
>>> f = Foo()
INFO:__main__.Foo:Meh