Для использования журнала с отметкой времени в его имени я делаю следующее:
def get_logger():
formatter = logging.Formatter('%(asctime)s %(name)s.%(funcName)s +%(lineno)s: '
'%(levelname)-8s [%(process)d] %(message)s')
logger = logging.getLogger('session_log')
logger.setLevel(logging.DEBUG)
file_title = datetime.now().strftime(os.path.join('Logs', '%Y-%m-%d %H:%M:%S session.log'))
# file_title = os.path.join('Logs', 'session.log')
if 'Logs' not in os.listdir():
file_title = f'{os.path.join("..", file_title)}'
file_handler = handlers.RotatingFileHandler(file_title, backupCount=10)
file_handler.setFormatter(formatter)
logger.addHandler(file_handler)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
logger.addHandler(console_handler)
return logger
, который создаст файл журнала с именами, похожими на: 2020-04-25 18:20:55 session.log
Там Есть 2 проблемы с этим подходом:
Я хочу один журнал на время выполнения с именем, включающим метки времени начала и окончания
Я буду При использовании этого регистратора во многих модулях и каждый раз, когда в модуле вызывается get_logger()
, будет генерироваться новая временная метка с новым файлом журнала, который совсем не такой, как хотелось бы.
Если я использую logging.handlers.RotatingFileHandler()
с опрокидыванием или logging.handlers.TimedRotatingFileHandler()
, проблема остается той же, потому что каждый раз, когда вызывается get_logger()
, будет вызываться опрокидывание, и синхронизатор по времени ограничит меня в использовании ежедневного журнала или, возможно, ежечасного журнала, который это не то, что я хочу, я хочу один журнал за прогон .
Как централизовать этот регистратор среди всех модулей со следующей структурой каталогов ?? get_logger()
будет в utils.py