Django - 记录器正在覆盖以前的日志文件和新的日志文件

Django - Loggers are overwriting the previous log file along with the new one

我正在使用 Django 记录器与 gunicorn worker 一起进行记录。目前,我正在测试 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 个 gunicorn worker 时才会发生这种情况。但是,如果我使用 1 个 gunicorn worker,这不会发生。

您不应该同时从多个进程直接使用基于文件的处理程序,如果您将 gunicorn 与此配置一起使用,就会出现这种情况。相反,使用 SocketHandlerQueueHandler 将日志从 webapp 发送到一个单独的进程,该进程将它们记录到磁盘。 Python logging cookbook 有更多信息和示例代码,太长无法在此处重现。

Python(以及许多其他语言)不支持从多个并发进程写入单个文件而不会相互影响。