Я попытался установить getLogger на уровень модуля. Однако он имеет некоторые недостатки. Вот мой пример:Python: где поставить logging.getLogger
from logging.handlers import TimeRotatingFileHandler
log_monitor = logging.getLogger('monitorlog')
log_monitor.setLevel(logging.DEBUG)
log_monitor.propagate = False
handler = TimedRotatingFileHandler('somedirectory/monitor.log',
when='h',
interval=1,
backupCount=30)
monitor_format = logging.Formatter('%(asctime)s: %(message)s')
handler.setFormatter(monitor_format)
log_monitor.addHandler(handler)
Проблема в том, что когда какой-либо другой модуль импортирует этот код, будет выполнен вышеуказанный код. Возможно, в то время somedirectory
даже не существует, и сборка завершится неудачно.
Фактически, этот регистратор будет использоваться в классе, поэтому я думаю о том, чтобы положить getLogger
в класс. Тем не менее, я чувствую, что если люди создают несколько объектов этого класса, этот фрагмент кода будет вызываться несколько раз. Я предполагаю, что эта часть кода должна быть вызвана только один раз.
Я довольно новичок в python. Где люди обычно ставят свои getLogger
и в этом случае, где я должен положить этот кусок кода?