Я использую сервер 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')
На самом деле происходит то, что первый рабочий поток вращается, вращает файлы журнала, и когда следующий рабочий поток пытаетсяповернуть журнал, он удаляет текущий повернутый файл и записывает данные текущего потока в файл. Таким образом, последний рабочий поток также удаляет и записывает свои данные в файл, и, таким образом, данные журнала всех предыдущих потоков теряются. Как я могу избежать этой проблемы?