我正在编写一个 Django 应用程序并使用基本的 URL 路由来查看。我正在尝试将日志记录到系统日志。我想将所有传入请求记录到系统日志。我的 LOGGING 字典看起来像这样:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse',
},
'require_debug_true': {
'()': 'django.utils.log.RequireDebugTrue',
},
},
'formatters': {
'verbose': {
'format': '%(process)-5d %(name)s:%(lineno)d %(levelname)s %(message)s'
},
'simple': {
'format': '[%(asctime)s] %(name)s %(levelname)s %(message)s',
'datefmt': '%d/%b/%Y %H:%M:%S'
},
},
'handlers': {
'console': {
'level': 'DEBUG',
'filters': ['require_debug_true'],
'class': 'logging.StreamHandler',
'formatter': 'simple'
},
'syslog': {
'level': 'DEBUG',
'class': 'logging.handlers.SysLogHandler',
'facility': 'local7',
'address': '/dev/log',
'formatter': 'verbose'
},
},
'loggers': {
'django.server': {
'handlers': ['console', 'syslog'],
'level': 'INFO',
'propagate': False
},
'my_project': {
'handlers': ['console', 'syslog'],
'level': 'INFO',
'propagate': False,
},
# root logger
'':{
'handlers': ['console', 'syslog'],
'level': 'INFO',
'disabled': False
},
},
}
每当我点击服务器上的任何 URL 时,控制台都会记录以下内容:
[01/Oct/2016 18:30:34] "POST /api/v1/users/login/ HTTP/1.1" 200 73
但我的日志文件中没有任何内容。
当我在代码中插入 logger.error('Something went wrong!') 时,它会记录在我的日志文件中。
如何在我的日志文件中获取请求日志?
TIA
请您参考如下方法:
从 django 到 syslog 的日志记录请求取决于几件事:
- 系统日志配置。我假设您的系统日志配置是 正确且系统日志不会从 local7 删除调试消息。
- 如果您使用“runserver”运行您的应用程序,django 使用内置的轻量级 http 服务器。此服务器记录请求消息。在 1.10 之前,它曾经记录到 sys.stderr 并且无法通过 LOGGING dict 进行配置。在 django 1.10 中,这已更改为使用 python 日志记录机制:https://docs.djangoproject.com/en/1.10/ref/django-admin/#django-admin-runserver
- 例如,如果您使用 nginx+uwsgi 运行您的应用,则日志记录请求由 nginx/uwsgi 处理。
