【发布时间】:2016-10-10 16:53:21
【问题描述】:
当我运行 django 开发服务器 (./manage.py runserver) 时,所有请求的 url 都方便地登录到进程 stdout,并带有准确的时间和响应代码:
[09/Jun/2016 23:35:53] "GET /api/game/ HTTP/1.1" 404 3185
[09/Jun/2016 23:36:01] "GET /api/game/123/ HTTP/1.1" 404 1735
这非常方便,因为在分析输出时,您会立即看到与您的日志消息对应的请求,例如:
WARNING:2016-06-09 23:41:27,806:views:7449:140139847718656: No such object in the database: u'123'
[09/Jun/2016 23:41:27] "GET /api/game/123/ HTTP/1.1" 404 1735
我曾经使用 uwsgi+nginx,所以我对所有内容都使用了“控制台”日志记录处理程序,然后像这样启动 uwsgi:
exec uwsgi --master --die-on-term --logto /var/log/uwsgi.log
因此,我在/var/log/uwsgi.log 中获得了所有必要的日志记录、uwsgi 的请求记录和我自己的日志记录消息。
现在我想用 Apache+mod WSGI+django 达到同样的效果。我希望唯一的文件在一个地方包含来自我的 django 应用程序的所有请求和所有日志。
我尝试使用 Django 日志记录配置来实现这一点,但即使我将 django.requests 重定向到同一个文件,我也只会在日志中得到我自己的消息,根本没有请求。这是配置的一部分:
'handlers': {
'file_handler': {
'level': DEBUG and 'DEBUG' or 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': join(LOG_DIRECTORY, 'api_log.log'),
'maxBytes': 1024 * 1024 * 5, # 5 MB
'backupCount': 15,
'formatter': 'verbose',
},
},
'loggers': {
'api': {
'handlers': ['file_handler'],
'level': DEBUG and 'DEBUG' or 'INFO',
},
'django': {
'handlers': ['file_handler'],
'level': DEBUG and 'DEBUG' or 'INFO',
},
'django.request': {
'handlers': ['file_handler'],
'level': DEBUG and 'DEBUG' or 'INFO',
},
'django.db.backends': {
'handlers': ['file_handler'],
'level': DEBUG and 'INFO' or 'WARNING',
'propagate': False,
},
}
有没有办法用 apache+WSGI+django 实现 nginx+uwsgi+django 的日志记录行为?还是唯一的方法是将 apache access.log 和我的日志保存在单独的文件中?
我猜在第一种情况下是开发服务器记录了请求,在第二种情况下是 uwsgi 进程。也许有办法告诉 WSGIDaemonProcess 做同样的事情?
【问题讨论】:
标签: python django apache logging wsgi