При кодировании Python я часто использую модуль логирования.
После некоторых неудачных попыток и чтения таких статей, как эта , я стараюсь по возможности предотвращать выполнение кода во время импорта.
Однако, ради простоты, я склоняюсь к тому, чтобы получить свой регистрирующий объект в самом начале файла модуля:
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger('product.plugin.foo.bar')
Таким образом, мой регистратор доступен по всему миру, и я могу просто написать «logger.error ()» где угодно. Альтернатива - создать его для всего класса:
class Bar(object):
logger = logging.getLogger('product.plugin.foo.bar')
Однако теперь мне приходится каждый раз вводить имя класса. Чтобы не вводить имя класса, у меня возникает соблазн использовать вместо этого «self», что не удастся в статических методах.
def my_method(self):
Bar.logger.error('foo')
def my_method_2(self):
self.logger.error('foo') # ok...
@staticmethod
def my_method_2():
self.logger.error('foo') # boom!
Итак, сначала, похоже, что создание объекта логгера в масштабе всего модуля кажется правильным решением - все же такое чувство, что я могу в конечном итоге столкнуться с проблемами, связанными с импортом, когда делаю это следующим образом ...