Вам, вероятно, стоит заглянуть в Python Logging HOWTO , чтобы понять, как он работает.
Короче говоря, все, что обычно делают модули, это получение регистратора в форме G_LOG = logging.getLogger('package.name')
и отправкасообщения для регистратора: G_LOG.info('some message'), G_LOG.exception('something bad happened')
.Модули обычно не должны ничего настраивать.
Приложение, использующее модули, может включить регистрацию и настроить обработчики на основе имен регистратора:
- прослушивание всех сообщений или
- прослушивать только сообщения, превышающие определенный порог, или
- прослушивать сообщения только от регистраторов, имя которых начинается с
package
, или - прослушивать сообщения только от регистраторов, имя которых начинается с
package.name
и т. д.
Самый простой способ - настроить ведение журнала через logging.basicConfig где-то в начале вашего приложения:
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s %(levelname)-8s %(message)s',
datefmt='%Y-%m-%d %H:%M:%S',
filename=log_file, filemode='a')
Таким образом, вы будетезаписывать все сообщения журнала из всех модулей в log_file
.
Если вам нужна более детальная стратегия ведения журнала (помещайте журналы от разных регистраторов в разные файлы или отправляйте трассировки стека в отдельный файл), лучшеопределить файл конфигурации регистрации и настроить ведение журнала, используя logging.config.dictConfig или logging.config.fileConfig
.
PS Я обычно создаю два регистратораs в качестве переменных модуля:
G_LOG = logging.getLogger(__name__)
ST_LOG = logging.getLogger('stacktrace.' + __name__)
до G_LOG
Я отправляю только однострочные сообщения.В ST_LOG
я дублирую важные сообщения, используя ST_LOG.exception
, который неявно имеет exc_info=True
и записывает трассировку стека текущего исключения.
В начале приложения я загружаю конфигурацию, которая конфигурирует два регистратора (и дваобработчики файлов для них): тот, который получает сообщения, которые начинаются с stacktrace
и имеет propagate=0
(то есть сообщения трассировки стека не видны вверху) и корневой регистратор, который обрабатывает остальные сообщения.Я не буду помещать сюда свои полные файлы конфигурации журнала, так как это полезная домашняя работа, чтобы понять, как все это работает.