【问题标题】:django logging - django.request logger and extra contextdjango logging - django.request 记录器和额外的上下文
【发布时间】: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 的一部分显式传入的?

【问题讨论】:

    标签: python django logging django-settings


    【解决方案1】:

    django-requestlogging middleware plugin 可以轻松记录与请求相关的信息,而无需调整所有记录调用以添加 requestextra 参数。然后只需配置您的记录器即可。

    使用 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(*) 方法
    猜你喜欢
    • 2016-09-28
    • 2015-06-18
    • 2015-08-07
    • 2013-12-15
    • 2015-05-04
    • 2019-01-14
    • 2016-01-15
    • 2015-02-18
    • 2014-05-25
    相关资源
    最近更新 更多