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

标签 python django logging gunicorn

我正在使用 Django 记录器与 gunicorn worker 一起进行记录。目前,我正在测试 3 名 worker ,我正在使用 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(以及许多其他语言)不支持从多个并发进程写入单个文件而不会相互影响。

关于python - Django - 记录器正在覆盖以前的日志文件和新的日志文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70141427/

相关文章:

python - odeint <-> interp1d 相互作用中可能存在的错误?

django - 向Solr添加文档失败: [Reason: Error 404 Not Found]

java - 是否有日志解析器 Java 库?

python - 500 内部服务器错误

python - 使用 seaborn 对 python 中的 matplotlib 进行核密度估计的下限

Django 统计 View

logging - 基于 xml 的配置的 Azure 诊断问题

regex - 解析apache错误日志文件的正则表达式

python - 将单个 'for' 循环转换为嵌套 'for' 循环

django - 为什么 Celery 任务测试结果不一致?