【问题标题】:How to add request id in Django logs without modifying logger call?如何在不修改记录器调用的情况下在 Django 日志中添加请求 ID?
【发布时间】:2015-06-28 13:23:14
【问题描述】:

我想在我的 Django 项目的日志中添加请求和用户 ID。我在互联网上找到的方法需要我在每次这样的记录器调用时发送额外的请求,

logger.info('This is my info log line', extras={ 'request', request })

但我不想修改每个现有的记录器调用。处理程序/格式化程序可以做到这一点吗?

【问题讨论】:

    标签: python django python-2.7 logging


    【解决方案1】:

    如果请求是一个记录器中的常量,您可以使用自定义过滤器来归档此目标:

    import logging
    class CustomFilter(logging.Filter):
        def __init__(self, request):
            self.request = request
        def filter(self, record):
            record.request = self.request
            return True
    

    然后将 %(request)s 添加到您的格式化程序中,并将 CustomFilter 添加到您的记录器的过滤器中:

    logger.addFilter(CustomFilter(CONSTANT_REQUEST))
    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(logging.Formatter('%(request)s %(levelname)s %(message)s'))
    logger.addHandler(handler)
    

    【讨论】:

    • “如果请求是一个记录器中的常量”是什么意思?
    • 另外,如何将请求传递给 init
    • 我可以在 django 日志设置中传递请求吗?就像我想做的那样:``` 'filters': { 'require_debug_false': { '(request)': 'app.custom_logger.UpgradFilter', } }, ``
    猜你喜欢
    • 2010-12-12
    • 2015-06-27
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-04
    • 2020-08-01
    • 2012-10-08
    • 1970-01-01
    相关资源
    最近更新 更多