Django将状态为200的请求记录到syslog

时间:2016-10-01 18:41:35

标签: python django logging

我正在编写Django应用程序并使用基本URL路由来查看视图。我正在尝试实现对syslog的日志记录。我想将所有传入的请求记录到syslog中。我的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

1 个答案:

答案 0 :(得分:1)

从django到syslog的日志记录请求取决于几个方面:

  • Syslog配置。我假设您的syslog配置是 correct和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处理。