У нас есть внутреннее приложение, и я хочу, чтобы сервер 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, но мне просто интересно, знает ли кто-нибудь способ сделать что-то подобное с помощью стандартной конфигурации, прежде чем я напишу модуль.
Используйте функцию канала журнала 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.