@NickNameNew

Почему логи переписывают друг друга в многопоточном использовании?

import logging
import logging.handlers

_log = logging.getLogger('DEBUG')
logfile = 'logs/debug.log'
formatter = logging.Formatter('%(asctime)s %(message)s')

handler = logging.handlers.TimedRotatingFileHandler(logfile,
                                                    when='midnight',
                                                    backupCount=10)
handler.setLevel(logging.DEBUG)
handler.setFormatter(formatter)

_log.setLevel(logging.DEBUG)
_log.addHandler(handler)


Запускаю в 10 потоков скрипт. В нем внутри подключаю это логирование.
Скрипт в 10 потоков работает постоянно и раз в сутки он пишет лог за новый день, но на новый день вылезает баг.
Каждый поток создаёт файл когда ему нужно записать что то в лог и таким образом файл пересоздается 10 раз и логи не сохраняются(
Возможно немного иначе все происходит, но на следующий день часть логов или отсутствует или в разорваном виде лежит. К примеру я знаю что прописано 3-и лога подряд, а вижу в файле только 1-н или 2-ва последних, а в файле за предыдущий день их нет.

Как можно это исправить или что то другое использовать для многопоточного логирования
  • Вопрос задан
  • 180 просмотров
Пригласить эксперта
Ответы на вопрос 3
@rPman
странно, питоновский логгер flush-ит каждую запись
возможно проблема с ротацией логов, она не рассчитана на многопользовательскую запись

Для многопоточных логов лучше какой то сервер поднимать и по сокетам ему слать логи. Ротацию должен делать кто то один.
Ответ написан
Скрипт в 10 потоков работает постоянно и раз в сутки он пишет лог за новый день, но на новый день вылезает баг.
Каждый поток создаёт файл когда ему нужно записать что то в лог и таким образом файл пересоздается 10 раз и логи не сохраняются(

Уберите ротацию из скрипта(Понятное дело - каждый скрипт сделал ротацию одного и того же лога) и используйте logrotate, там используйте параметр copytruncate, чтобы скрипты продолжали писать в файл с тем же хендлером.
Ответ написан
Комментировать
@deliro
Агрессивное программирование
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы