django logging - django.request记录器和额外的上下文

w--*_*w-- 13 python django logging django-settings

我在django 1.3.,python 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',        
        }
    },
Run Code Online (Sandbox Code Playgroud)

但这会导致整体日志记录失败(即没有记录输出)


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

有人可以帮助解释/详述

来自文档的所有引用实际上意味着使用django.request的django中的所有位置,请求作为额外的一部分显式传入.

请求显式传入请求作为额外的一部分?

Vin*_*jip 24

您不能request.user在格式字符串中使用,因为%-formatting不会处理它.您可以使用格式字符串,例如

'[%(asctime)s] %(levelname)s %(module)s %(message)s %(user)s'
Run Code Online (Sandbox Code Playgroud)

并且,在您的日志记录调用中,使用类似的东西

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

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

如果使用django.request记录器,则status_code和请求将由extraDjango 在dict中传递.如果你需要request.user,你可能需要添加一个logging.Filter类似的东西:

class RequestUserFilter(logging.Filter):
    def filter(self, record):
        record.user = record.request.user
        return True
Run Code Online (Sandbox Code Playgroud)

这样您就可以在格式化的输出中显示用户.


brk*_*rki 6

Django的requestlogging中间件插件可以很容易地登录请求相关的信息,而不调整所有的通话记录中添加requestextra参数。那么这只是配置记录器的问题。

使用 django-requestlogging 时可以记录以下项目:

  • 用户名
  • http_user_agent
  • 路径信息
  • 远程添加
  • 请求方法
  • server_protocol