Как централизовать файл журнала с отметками времени начала и конца в качестве имени в python - PullRequest
0 голосов
/ 25 апреля 2020

Для использования журнала с отметкой времени в его имени я делаю следующее:

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 проблемы с этим подходом:

  1. Я хочу один журнал на время выполнения с именем, включающим метки времени начала и окончания

  2. Я буду При использовании этого регистратора во многих модулях и каждый раз, когда в модуле вызывается get_logger(), будет генерироваться новая временная метка с новым файлом журнала, который совсем не такой, как хотелось бы.

Если я использую logging.handlers.RotatingFileHandler() с опрокидыванием или logging.handlers.TimedRotatingFileHandler(), проблема остается той же, потому что каждый раз, когда вызывается get_logger(), будет вызываться опрокидывание, и синхронизатор по времени ограничит меня в использовании ежедневного журнала или, возможно, ежечасного журнала, который это не то, что я хочу, я хочу один журнал за прогон .

Как централизовать этот регистратор среди всех модулей со следующей структурой каталогов ?? get_logger() будет в utils.py

dir

...