将app level username/userid注入nginx/Apache日志

Par*_*and 8 apache django logging nginx

有没有办法将应用程序级用户名或id(在本例中为django用户名或id)注入Apache或ngnix日志?请注意,我不是在询问HTTP auth用户名.

Kri*_*ass 14

我目前正在使用一个简短的自定义中间件将此数据添加到响应标头,如下所示:

class RemoteUserMiddleware(object):
    def process_response(self, request, response):
        if request.user.is_authenticated():
            response['X-Remote-User-Name'] = request.user.username
            response['X-Remote-User-Id'] = request.user.id

        return response
Run Code Online (Sandbox Code Playgroud)

有了这个地方,你可以用%{X-Remote-User-Name}o%{X-Remote-User-Id}o在你的Apache配置(或类似nginx的),并得到的信息直接进入你的日志.


Pet*_*ell 2

我们做了类似的事情,只是我们告诉 Apache 存储 Django sessionid cookie。

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\" %{sessionid}C" withsession
CustomLog logs/example.com-access_log withsession
Run Code Online (Sandbox Code Playgroud)

将 sessionid 映射到用户的过程需要两步,但很容易实现。您可以通过设置一个带有显式 ID 的 cookie,然后使用自定义日志来捕获它来执行类似的操作。