Django记录请求的日志

17

我正在使用django 1.11在aws弹性beanstalk上,一直试图让我的应用程序记录日志但没有成功......

我在settings.py中有这些设置

LOGGING_CONFIG = None
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'file': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',
            'filename': '/opt/python/current/app/staging.log',
        },
    },
    'loggers': {
        '': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['file'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
}
import logging.config
logging.config.dictConfig(LOGGING)

然后我尝试调用我的API之一,并期望日志中会显示某些内容,但实际上没有。我认为 django.request 记录器应该自动记录所有传入请求,或者我需要创建一个中间件来执行 logger.debug('something') 吗?

在Django中进行日志记录比我想象的要复杂得多 :(

2个回答

16

Django日志扩展在开发和生产环境下工作方式不同(settings.DEBUG=True|False)。

你期望看到的 - http请求日志 - 是由django.server日志记录器写入的,该日志记录器仅在开发服务器(runserver命令)中活动。

我看到你的配置中使用了django.request日志记录器。这个记录器的名称非常令人困惑 - 因为正如其名称所示 - 用户会期望它记录所有http请求 - 但它并不会。

django.request仅记录4xx和5xx请求。

我制作了一个视频教程详细解释了这个问题。

Django关于日志记录器的文档。


2
Firefox由于安全原因不允许打开屏幕录制链接,即证书不受信任。 - vpap
我对Django文档中的django.request记录器仅记录4xx和5xx状态码这一事实感到惊讶。感谢您指出这一点。 - Nexus
Firefox在MacOS上无法打开上面的屏幕录制链接,而在Chrome上则显示一条消息,指出我的计算机因未经授权的访问而被锁定,并检测到了木马病毒。 - vpap

8

Django登录示例,日志文件位于/path/to/your/project/log/info.log,你需要先在log/目录下创建info.log文件。

settings.py

LOG_PATH = os.path.join(BASE_DIR, "log/")
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'standard': {
            'format': '%(asctime)s [%(levelname)s]- %(message)s'}

    },
    'handlers': {
        'django_error': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': LOG_PATH + 'django.log',
            'formatter': 'standard'
        },
        'info': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': LOG_PATH + 'info.log',
            'formatter': 'standard'
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'standard'
        }
    },
    'loggers': {
        'info': {
            'handlers': ['info', "console"],
            'level': 'DEBUG',
            'propagate': True
        },
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True,
        },
        'django.request': {
            'handlers': ['django_error', 'console'],
            'level': 'DEBUG',
            'propagate': True,
        },
        'django.db.backends': {
            'handlers': ['console'],
            'level': 'ERROR',
            'propagate': True,
        }
    },
}

日志器的作用是:

  • info:自定义的调试信息
  • django:请求记录
  • django.request:错误请求
  • django.db.backends:与数据库交互的代码相关消息

更多信息请查看这里

views.py

import logging
logger = logging.getLogger("info")
logger.info('something')

你将获得什么。
2017-08-31 13:05:40,492 [INFO]- something

稍后在日志/信息日志中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接