2011-07-25 11 views

Odpowiedz

2

Robimy coś takiego, tylko informujemy Apache'a, aby zapisał ciasteczko 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 

To rodzaj dwuetapowego procesu mapowania sessionid na użytkownika, ale jest łatwy do wdrożenia. Możesz zrobić coś podobnego, ustawiając plik cookie z jawnym identyfikatorem, a następnie używając niestandardowego dziennika, aby go przechwycić.

+0

Doskonale, nie wiedziałem o opcji "C" w logowaniu, która prawdopodobnie zadziała. – Parand

13

obecnie używam krótki niestandardowe middleware, aby dodać te dane do nagłówków odpowiedzi, jak poniżej:

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 

Mając to na miejscu, można po prostu użyć %{X-Remote-User-Name}o and %{X-Remote-User-Id}o w konfiguracji Apache (lub podobny dla nginx) i uzyskaj informacje bezpośrednio w dziennikach.

0

Jeśli masz plik cookie o nazwę użytkownika, powiedz "uname", można dodać% {uname} c, tak:

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

Tutaj X-Przekazano-For to adres IP użytkownika. Mój serwer aplikacji to tomcat8 z ochroną Spring. Dane wyjściowe są następujące:

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" 
Powiązane problemy