Czy istnieje sposób wstrzyknięcia nazwy użytkownika lub id poziomu aplikacji (w tym przypadku nazwy użytkownika lub identyfikatora django) do dziennika Apache lub ngnix? Zauważ, że nie pytam o nazwę użytkownika auth HTTP.Wstrzykiwanie nazwy użytkownika/userID poziomu aplikacji do dziennika nginx/Apache
Odpowiedz
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ć.
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.
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"
- 1. Wstrzykiwanie aplikatora Log4J do aplikacji Grails
- 2. Wstrzykiwanie usterek dla aplikacji .NET?
- 3. Wstrzykiwanie zależności do testów
- 4. Monitorowanie pamięci aplikacji ASP.NET z poziomu aplikacji
- 5. Wstrzykiwanie fasoli do fasoli
- 6. Zapisywanie do dziennika IIS z aplikacji ASP.NET
- 7. Wstrzykiwanie fasoli do enum
- 8. Wstrzykiwanie javascript do zombie.js
- 9. Wstrzykiwanie konta użytkownika do mySQL
- 10. Wstrzykiwanie zależności w aplikacji n-warstwowej?
- 11. Wstrzykiwanie zarządzanej biblioteki DLL do aplikacji .net 4.0
- 12. Wstrzykiwanie DbContext do walidatora FluentValidation
- 13. Używanie aplikacji FastCGI z poziomu aplikacji C#
- 14. Wstrzykiwanie zmiennej lokalnej do wiązania
- 15. Wstrzykiwanie łańcucha znaków do 'cin'
- 16. Wstrzykiwanie rozwiązanej obietnicy do usługi
- 17. Wstrzykiwanie zmiennych do pakietu sieciowego
- 18. Uzyskiwanie wersji aplikacji Grails z poziomu aplikacji
- 19. Windows Phone 7 pin do uruchamiania płytek z poziomu aplikacji
- 20. Wstrzykiwanie zależności i JavaFX
- 21. Zmiana nazwy pliku dziennika kilka razy w czasie wykonywania
- 22. Wstrzykiwanie Logger'a do Ejb przy użyciu CDI
- 23. IIS 7.0 Pula aplikacji Odzyskiwanie plików dziennika
- 24. Wstrzykiwanie zależności na AuthorizationOptions
- 25. Jak uzyskać dostęp do katalogu danych JBoss z poziomu aplikacji?
- 26. Dodawanie ActionBar do aplikacji Android API poziomu 8?
- 27. Zastosuj styl poziomu aplikacji do wszystkich pól tekstowych.
- 28. Kompilowanie aplikacji MVC dla średniego poziomu zaufania
- 29. Wstrzykiwanie eksternalizowanej wartości do adnotacji wiosennej
- 30. Wstrzykiwanie serwisowe do kontrolera za pomocą AngularJS
Doskonale, nie wiedziałem o opcji "C" w logowaniu, która prawdopodobnie zadziała. – Parand