【问题标题】:How to insert Django data on Nginx logs?如何在 Nginx 日志中插入 Django 数据?
【发布时间】:2021-06-15 09:45:14
【问题描述】:

我正在考虑如何在用户身份验证类上检索 Django 用户数据并将其传递给 Nginx 会话变量,然后在 nginx 日志记录设置上使用该数据创建一个 Nginx 访问日志条目,其中包含创建此类的 Django 用户请求。

我发现了这些想法:

  1. 通过 Django 或 Python 线程获取当前请求 https://gist.github.com/vparitskiy/71bb97b4fd2c3fbd6d6db81546622346 https://nedbatchelder.com/blog/201008/global_django_requests.html

  2. 设置会话变量: How can I set and get session variable in django?

  3. 然后通过 Nginx 配置记录 cookie 变量,例如: https://serverfault.com/questions/223584/how-to-add-recently-set-cookies-to-nginxs-access-log https://serverfault.com/questions/872375/what-is-the-difference-between-http-cookie-and-cookie-name-in-nginx

有更好的主意吗?我在重新发明轮子?

【问题讨论】:

    标签: django nginx logging


    【解决方案1】:

    你读过django's documentation on logging吗?

    我还没有使用过 nginx,但是使用 apache djangos 默认记录器也会输出到 apache 日志,这意味着你可以这样做:

    from logging import getLogger
    logger = getLogger('django')
    
    def my_view(request):
        logger.info(f'my view: {request.user}') 
    

    这会将用户输出到服务器日志。

    【讨论】:

    • 是的,我知道python日志模块。但是这种方法的问题是 Django 上的每个端点(或视图)都必须执行一个日志记录方法,以便将日志记录到 nginx 日志文件。此外,此日志记录日志可能具有与 nginx 不同的结构,从而导致另一个“规范化”问题。相反,我在想,如果 Nginx 响应知道 django 用户 ID,然后记录它。就像转发的 IP 和代理一样。
    【解决方案2】:

    我终于做到了。在 Django 中放置一个中间件,在 cookie 中插入我希望 nginx 记录的日志数据。

    然后我使用 $upstream_cookies_NAME 来拯救 COOKIES['NAME'](如果有)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2017-02-06
      相关资源
      最近更新 更多