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

Python django日志-django.request记录器和额外上下文,python,django,logging,django-settings,Python,Django,Logging,Django Settings,django 1.3和python 2.6上的Am 在这里的django文档中 它表示消息具有以下额外上下文:状态和请求。 如何使这些文件显示在调试文件中?我尝试在我的日志配置中执行以下操作: 'formatters': { 'simple_debug': { 'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',

django 1.3和python 2.6上的Am

在这里的django文档中

它表示消息具有以下额外上下文:状态和请求。
如何使这些文件显示在调试文件中?我尝试在我的日志配置中执行以下操作:

'formatters': {        
        'simple_debug': {
            'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',        
        }
    },
class RequestUserFilter(logging.Filter):
    def filter(self, record):
        record.user = record.request.user
        return True
但这会导致整个日志记录失败(即没有日志记录输出发生)


编辑: 因此,在提交问题后,我立即发现:

有人能帮忙解释一下吗

文档中的所有引用实际上意味着 对于使用django.request的django,该请求是显式的 作为额外费用的一部分传入


请求作为额外到的一部分显式传递到何处

您不能在格式字符串中使用
request.user
,因为%-格式无法处理该问题。您可以使用格式字符串,例如

'[%(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
dict中传递状态代码和请求。如果需要
request.user
,可能需要添加一个
logging.Filter
,其功能如下:

'formatters': {        
        'simple_debug': {
            'format': '[%(asctime)s] %(levelname)s %(module)s %(message)s %(request.user)s',        
        }
    },
class RequestUserFilter(logging.Filter):
    def filter(self, record):
        record.user = record.request.user
        return True
因此,您可以在格式化输出中显示用户。

使记录请求相关信息变得很容易,而无需调整所有日志记录调用,以使用
额外的
参数添加
请求。然后,只需配置记录器即可

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

  • 用户名
  • http\u用户\u代理
  • 路径信息
  • 远程添加
  • 请求法
  • 服务器协议

如果我不想使用
logger.debug(*)
生产环境请求的方法总是设置为“无”。你能帮忙吗@布尔基的工作很有魅力。我认为这是一个比上述更好的解决方案,因为我不必更改所有现有的日志。