Skip to main content
 首页 » 编程设计

python之Django 将状态为 200 的请求记录到系统日志

2025年04月02日32www_RR

我正在编写一个 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 处理。