автоматический выделенный журнал доступа для каждого клиента, использующего ip в именовании

У нас есть внутреннее приложение, и я хочу, чтобы сервер apache httpd создавал новые файлы журналов на основе каждого IP-адреса клиента. В документации я вижу, что у вас может быть несколько журналов.

http://httpd.apache.org/docs/2.2/logs.html

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

но на самом деле мне нужно что-то вроде этого.

CustomLog logs/%h-access_log common

где% h экстраполируется в IP-адрес, то есть 1.1.1.1-access_log

Я полагаю, что есть способ сделать это с помощью mod_perl, но просто интересно, знает ли кто-нибудь способ сделать что-то подобное с помощью стандартной конфигурации, прежде чем я напишу модуль.

0
задан 10 March 2017 в 21:26
1 ответ

Используйте канал передачи логов Apache: журналы могут отправляться во внешний процесс. Этот процесс будет иметь полную свободу действий для фильтрации вещей по своему усмотрению и создания файлов по мере необходимости. Смотрите http://httpd.apache.org/docs/2.2/logs.html#piped

Вам нужно будет просто написать небольшой скрипт, который разбирает входной лог для извлечения IP-адреса и пересылает строку в соответствующий файл.

Иначе, если вы вроде как контролируете количество клиентов, вы можете заранее определить все необходимые файлы, а затем, используя условное протоколирование, через определенные переменные, посмотреть этот пример по тому же URL:

# Mark requests from the loop-back interface
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# Mark requests for the robots.txt file
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Log what remains
CustomLog logs/access_log common env=!dontlog 

Но даже с вашим последним комментарием, я все равно думаю, что постобработка - это лучший путь. YMMV.

5
ответ дан 4 December 2019 в 11:25

Теги

Похожие вопросы