django logging - django.request 记录器和额外的上下文
Posted
技术标签:
【中文标题】django logging - django.request 记录器和额外的上下文【英文标题】:django logging - django.request logger and extra context 【发布时间】:2012-05-04 17:53:46 【问题描述】:我在 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',
,
但这会导致整体日志记录失败(即没有发生日志记录输出)
编辑: 因此,在提交问题后,我立即遇到了这个问题: http://groups.google.com/group/django-users/browse_thread/thread/af682beb1e4af7f6/ace3338348e92a21
有人可以帮忙解释/详细说明
文档中所有引用的真正意思是里面的所有地方 在使用 django.request 的 django 中,请求是明确的 作为额外的一部分传入。
request 是作为 extra to 的一部分显式传入的?
【问题讨论】:
【参考方案1】:django-requestlogging middleware plugin 可以轻松记录与请求相关的信息,而无需调整所有记录调用以添加 request
和 extra
参数。然后只需配置您的记录器即可。
使用 django-requestlogging 时可以记录以下项目:
用户名 http_user_agent 路径信息 remote_add request_method server_protocol【讨论】:
请求始终设置为无。你能帮忙吗? @brki 像魅力一样工作。我认为这是比上述解决方案更好的解决方案,因为我不必更改所有现有日志。【参考方案2】:您不能在格式字符串中使用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
dict 被合并到日志事件记录中,以 user
属性结束,然后通过格式字符串获取并出现在日志中。
如果使用django.request
记录器,则状态码和请求将由Django 在extra
字典中传递。如果您需要request.user
,您可能需要添加一个logging.Filter
,它执行以下操作:
class RequestUserFilter(logging.Filter):
def filter(self, record):
record.user = record.request.user
return True
这样您就可以在格式化的输出中显示用户。
【讨论】:
如果我不想在生产环境中使用logger.debug(*)
方法以上是关于django logging - django.request 记录器和额外的上下文的主要内容,如果未能解决你的问题,请参考以下文章