python - TimedRotatingFileHandler 在具有多实例的 Django 中不能正常工作

标签 python django logging

我使用 TimedRotatingFileHandler 来记录 Django 日志并每天轮换,但是检查日志文件,奇怪的问题是昨天的日志被截断了,今天的日志记录很少,昨天的日志丢失了!

Django 1.4
uwsgi 1.4.9
Python 2.6

我用 uwsgi 启动了 8 个 django 实例。 setting.py是

'handlers': {
    'apilog': {
        'level': 'INFO',
        'class': 'logging.handlers.TimedRotatingFileHandler',
        'filename': os.path.join(APILOG, "apilog.log" ),
        'when': 'midnight',
        'formatter': 'info',
        'interval': 1,
        'backupCount': 0,
    },
 },
 'loggers': {                                                                                                                        
    'apilog': {
        'handlers': ['apilog'],
        'level': 'INFO',
        'propagate': True  
     },
  }

我错过了什么吗?为什么旧的日志记录丢失了?

最佳答案

您不应同时从多个进程记录到基于文件的处理程序 - 这是不支持的,因为没有可移植操作系统支持它。

要从多个进程登录到单个目标,您可以使用以下方法之一:

  • 使用像 ConcurrentLogHandler 这样的东西
  • 使用 SysLogHandler(或 Windows 上的 NTEventLogHandler)
  • 使用 SocketHandler 将日志发送到单独的进程以写入文件
  • QueueHandlermultiprocessing.Queue 一起使用,如here 所述.

关于python - TimedRotatingFileHandler 在具有多实例的 Django 中不能正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18840785/

相关文章:

python - 在 openCV 和 python 中计算二值图像中的曲线、角度和直线

python - Numpy:为什么 'a += a.T' 不起作用?

python - Django 中可选的多个 URL 键值对参数

django - 当将 Sentry/Raven 与 Django 和 PythonAnywhere 结合使用时,出现 "Warning: We detected the use of uwsgi with disabled threads"

python - python 日志模块的日志记录问题

java - log4j - 动态压缩日志文件到 gz

python - 这是Django教程的问题还是包的问题,​​还是我的问题?

python - 是否可以将关系数据库表存储为 Elasticsearch 中的不同索引如果是,那么如何在索引中传递关系

django - 执行 Cloud Build 并连接到 Cloud SQL 时出错

python - 记录 dictConfig 不适用于多处理