Django的日志 - django.request记录仪和额外的上下文(django loggi

2019-07-29 03:22发布

上午的Django 1.3。,2.6蟒

在这里Django文档
https://docs.djangoproject.com/en/1.3/topics/logging/#django-request
它说,消息有以下额外的上下文:现状和要求。
你如何获得这些在调试文件显示出来? 我想在我的日志记录配置是这样的:

'formatters': {        
        'simple_debug': {
            'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',        
        }
    },

但使整个记录失败(即没有记录的输出情况)


编辑:所以立即提交问题后,我遇到了这个: http://groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21

有人可以帮助解释/细说

所有从文档的真正含义的报价是哪里django.request使用Django的内部的所有地方,请求被明确传递进来的多余部分。

其中明确要求在通过以额外的一部分?

Answer 1:

不能使用request.user格式字符串,如%-formatting不处理。 你可以使用格式字符串如

'[%(asctime)s] %(levelname)s %(module)s %(message)s %(user)s'

并且,在你的日志调用,使用类似

logger.debug('My message with %s', 'args', extra={'user': request.user})

extra字典合并到事件日志记录,这与最终user的属性,而这则获得通过格式字符串回升,并出现在日志中。

如果使用的是django.request记录仪,该STATUS_CODE和要求将在传递extra的Django的字典。 如果你需要request.user ,你可能需要添加一个logging.Filter这确实是这样的:

class RequestUserFilter(logging.Filter):
    def filter(self, record):
        record.user = record.request.user
        return True

这样就可以显示格式化输出的用户。



Answer 2:

在Django的requestlogging中间件插件可以很容易地登录请求相关的信息,而不调整所有的日志调用添加requestextra参数。 这不只是一个配置您的伐木工人的问题。

以下项目可使用的Django requestlogging时被记录:

  • 用户名
  • HTTP_USER_AGENT
  • PATH_INFO
  • remote_add
  • REQUEST_METHOD
  • SERVER_PROTOCOL


文章来源: django logging - django.request logger and extra context