Django - Логгеры перезаписывают предыдущий файл журнала вместе с новым

Я использую Django logger для ведения журнала вместе с рабочими gunicorn. Сейчас я тестирую с 3 рабочими и использую TimedRotatingFileHandler. Я настроил when = m и interval = 1, я попробовал отправить несколько 1000 запросов и он записывает новый файл и перезаписывает старый файл.

Вот мой конфиг из settings.py

'debug': {
            'level': 'DEBUG',
            'filename': BASE_DIR + '/Log/debug.log',
            'class': 'logging.handlers.TimedRotatingFileHandler',
            'when': 'M',
            'interval': 1,
            'formatter': 'verbose'
        },

Это произойдет только если я использую более 1 рабочего-гуникорна. Но если я использую 1 рабочего-гуникорна, этого не происходит.

Вам не следует использовать файловые обработчики непосредственно из нескольких процессов одновременно, что вы получите, если будете использовать gunicorn при данной конфигурации. Вместо этого используйте SocketHandler или QueueHandler для отправки логов из webapp в отдельный процесс, который записывает их на диск. В книге Python logging cookbook есть больше информации и примеры кода, которые слишком длинны, чтобы воспроизводить их здесь.

Запись в один файл из нескольких параллельных процессов без того, чтобы они наступали друг на друга, не поддерживается в Python (и во многих других языках).

Вернуться на верх