Мне нужно записать статистические данные в живой файл доступа Apache access_log (у меня есть другой процесс, подсчитывающий определенные строки в файле access_log, который периодически передает отчет другому процессу).
В настоящее время я просто заставляю запись в файл access_log, выполнив следующее в php:
file("http://127.0.0.1/logme.php?stuff_that_I_can_watch_here");
logme.php ничего не делает и возвращает пустой с успехом 200.
Проблема с вышеописанным методом заключается в том, что для каждого запроса на сервер Apache другой порождается для записи в журнал – следовательно, для удвоения требуемых серверов Apache.
Когда серверы накапливаются, простой и обычно быстрый локальный вызов сервера Apache занимает более 5 секунд.
Могу ли я напрямую писать в файл access_log без каких-либо проблем или, возможно, даже есть способ записать в файл apache_log с помощью php, аналогичного syslog () или error_log ()?
Вы можете использовать apache_note
( http://php.net/apache_note ) для записи ваших значений в заметку, а затем использовать CustomLog
с LogFormat
( %{NOTE_NAME}n
) ( http://httpd.apache.org/docs/2.2/ mod / mod_log_config.html ) для ввода новых ключей. Затем ваши программы, которые анализируют журнал доступа, могут также считывать новые параметры ведения журнала.
нормально ли писать в access_log напрямую
Вы можете написать прямо в access_log, но НЕ ДОЛЖНО это сделать.
Управляемый apache может порождать несколько процессов,
и файл блокировки для записи с использованием более медленного процесса, такого как PHP, – это просто дальнейшая скорость регистрации.
или есть простой способ добиться такого же эффекта, используя php
Не используйте PHP, добавьте дополнительный пользовательский журнал, если запрос полностью заполнит ваше требование.
Это более правильный способ, и этот пользовательский журнал должен содержать меньшую строку, например, статический доступ к файлам не регистрируется. Которые непосредственно улучшают парсинг журнала позже.
<?php $h = fopen('/path/to/access_log', 'a'); fwrite($h, 'Message'); fclose($h); ?>
Другие уже прокомментировали дизайн. Apache access_log предназначен для Apache для доступа к журналу, периода.
Я использую около десятка пользовательских файлов журналов в одном приложении для всех различных мониторингов, анализа производительности и судебных целей. Один файл журнала для каждой цели облегчает анализ журналов.