У меня есть 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 возвращать экземпляр того же журнала в противном случае?