У нас есть веб-сервер apache в качестве «входа» для входящего трафика, который он затем делегирует котам с помощью mod_jk.
Мы хотим зарегистрировать имя пользователя дайджеста HTTP, пример заголовка:
Authorization: Digest username="Mufasa",
realm="testrealm@host.com",
nonce="dcd98b7102dd2f0e8b11d0f600bfb0c093",
...
К сожалению, использование "% u" не работает как описано. Я предполагаю, что когда мы аутентифицируемся на стороне tomcat (apache делегирует вызовы tomcat с помощью mod_jk), собственное средство ведения журнала apache не знает, как получить доступ к дайджест-имени пользователя (потому что собственный модуль аутентификации игнорируется).
Чтобы обойти это: существует ли пользовательское выражение формата журнала с сопоставлением регулярных выражений, например говорит извлечь username = "(. *?)" из заголовка «Авторизация» и нажать в логи?
SetEnvIf Authorization username="([^"]+)" digest_username=$1
LogFormat "%h %l %{digest_username}e %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined_with_user
CustomLog /path/to/log combined_with_user
Не тестировал, поэтому не уверен, что Apache захлебнется цитатами в SetEnvIf
(возможно, им нужно сбежать) - но это должно быть довольно близко.