У меня есть 3 модуля Python.
LogManager.py
Runner.py
Other.py
Runner.py
- первый главный модуль в цепочке событий, и из этого модуля вызываются функции внутри Other.py
.
Итак, внутри Runner.py
У меня есть вызов функции для LogManager.py
logger = LogManager.get_log()
и оттуда я могу делать простые журналы, например logger.critical("OHNOES")
То, что я ХОЧУ, чтобы сделать функцию get_log
, похоже на одноэлементный шаблон, где, если регистратор не настроен, он настроит регистратор и вернет его. Иначе, он просто вернет регистратор.
Содержимое LogManager.py:
import logging
def get_log():
logger = logging.getLogger('PyPro')
logger.setLevel(logging.DEBUG)
# create file handler which logs even debug messages
fh = logging.FileHandler('pypro.log')
fh.setLevel(logging.DEBUG)
# create console handler with a higher log level
ch = logging.StreamHandler()
ch.setLevel(logging.WARNING)
# create formatter and add it to the handlers
fhFormatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
chFormatter = logging.Formatter('%(levelname)s - %(filename)s - Line: %(lineno)d - %(message)s')
fh.setFormatter(fhFormatter)
ch.setFormatter(chFormatter)
# add the handlers to logger
logger.addHandler(ch)
logger.addHandler(fh)
logger.info("-----------------------------------")
logger.info("Log system successfully initialised")
logger.info("-----------------------------------")
return logger
Как видите, LogManager.get_log () будет пытаться настроить журнал каждый раз, когда он вызывается. На самом деле, я немного сбит с толку относительно того, что именно происходит ...
Runner.py вызывает функцию get_log в своем основном методе.
Other.py вызывает get_log в глобальной области видимости (сразу после импорта, а не в любой функции)
В результате все журналы, которые я делаю, регистрируются дважды, так как обработчики создаются дважды для регистратора.
Каков самый простой способ пропустить функцию get_log для возврата экземпляра того же журнала в противном случае?