Следующий рабочий поток записывает предыдущие данные из журналов - PullRequest
0 голосов
/ 31 октября 2019

Я использую сервер uwsgi для запуска своего сервера фляг и создал несколько рабочих потоков для запуска приложения. В моем флеш-сервере я использовал TimedRotatingFileHandler для ротации логов в полночь. Но когда я запускаю его с несколькими порожденными рабочими потоками uwsgi, журналы чередуются, но следующий рабочий поток записывает предыдущие данные журналов, а я пропускаю журналы предыдущего дня. Если я запускаю uwsgi с 1 рабочим потоком, то нет проблем с ротацией логов. Но мне нужно запустить мой код в нескольких рабочих потоках. Как я могу добиться правильной ротации журнала с несколькими рабочими потоками. Это мой код uwsgi.

#!/usr/bin/env bash

uwsgi --disable-logging --processes 5 --socket 0.0.0.0:8000 --protocol=http --manage-script-name --mount /cv=analytics_server:app

Метод, используемый для ведения журнала:

def setup_logger(name, log_file, level=logging.INFO):
    handler = TimedRotatingFileHandler(log_file,  when="midnight", interval=1)
    handler.setFormatter(formatter)
    logger = logging.getLogger(name)
    logger.setLevel(level)
    logger.addHandler(handler)
    return logger
other_logger = setup_logger('other_logger', log_directory + 'other_logs/all_other_logs.log')
all_other_logger = setup_logger('all_other_logger', log_directory + 'all_other_logs/all_other_logs.log')

На самом деле происходит то, что первый рабочий поток вращается, вращает файлы журнала, и когда следующий рабочий поток пытаетсяповернуть журнал, он удаляет текущий повернутый файл и записывает данные текущего потока в файл. Таким образом, последний рабочий поток также удаляет и записывает свои данные в файл, и, таким образом, данные журнала всех предыдущих потоков теряются. Как я могу избежать этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...