2011-07-25 26 views

Trả lời

2

Chúng tôi làm một cái gì đó như thế này, chỉ có chúng tôi nói với Apache để lưu trữ các cookie sessionid Django.

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

Đây là quy trình gồm hai bước để ánh xạ sessionid cho người dùng nhưng dễ thực hiện. Bạn có thể làm một cái gì đó tương tự bằng cách thiết lập một cookie với ID rõ ràng trong nó và sau đó sử dụng nhật ký tùy chỉnh để nắm bắt nó.

+0

Tuyệt vời, tôi không biết tùy chọn "C" khi ghi nhật ký, điều này có thể hoạt động. – Parand

13

Tôi hiện đang sử dụng một trung gian tùy chỉnh ngắn để thêm dữ liệu này để tiêu đề phản ứng, như sau:

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 

Với điều này tại chỗ, bạn chỉ có thể sử dụng %{X-Remote-User-Name}o and %{X-Remote-User-Id}o trong cấu hình Apache của bạn (hoặc tương tự cho nginx) và nhận thông tin trực tiếp vào nhật ký của bạn.

0

Nếu bạn có một cookie cho tên người dùng, nói "uname", bạn có thể thêm% {uname} C, như thế này:

LogFormat "%{X-Forwarded-For}i %{uname}C %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

Ở đây X-Forwarded-For là địa chỉ dùng ip. Máy chủ ứng dụng của tôi là tomcat8 với bảo mật mùa xuân. Đầu ra như sau:

24.xx.xx.xxx user.name - - [09/Sep/2016:19:33:21 -0400] "GET /xxxx HTTP/1.1" 304 - "https://xxx/xxx" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36" 
Các vấn đề liên quan