gpt4 book ai didi

python - django 日志记录 - django.request 记录器和额外上下文

转载 作者:太空狗 更新时间:2023-10-29 17:25:38 25 4
gpt4 key购买 nike

我在 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

谁能帮忙解释/详细说明

All the quote from the docs really means is that all the places inside of django where django.request is used, the request is explicitly passed in as part of extra.

请求作为extra to的一部分显式传递到哪里?

最佳答案

您不能在格式字符串中使用 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 和请求将由 Django 在 extra dict 中传递。如果您需要 request.user,您可能需要添加一个 logging.Filter,它执行如下操作:

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

以便您可以在格式化输出中向用户显示。

关于python - django 日志记录 - django.request 记录器和额外上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10292082/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com