Запись в файл Apache access_log с помощью php - PullRequest
7 голосов
/ 17 декабря 2010

Мне нужно записать статистические данные в действующий файл доступа Apache Apache (у меня есть другой процесс, подсчитывающий определенные строки в файле 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 ()?

Ответы [ 3 ]

8 голосов
/ 27 августа 2012

Вы можете использовать apache_note (http://php.net/apache_note), чтобы записать свои значения в заметку, а затем использовать CustomLog с LogFormat (%{NOTE_NAME}n) (http://httpd.apache.org/docs/2.2/mod/mod_log_config.html), чтобы зарегистрировать новые ключиВаши программы, которые анализируют журнал доступа, могут также прочитать новые параметры регистрации.

1 голос
/ 17 декабря 2010

нормально ли писать в access_log напрямую

Вы можете написать напрямую в access_log, но НЕ МОЖЕТ делать это.
Работающий apache может порождать несколько процессов,
и блокировка файла для записи с использованием более медленного процесса, такого как PHP, просто еще больше замедляет скорость регистрации.

или есть простой способ добиться того же эффекта, используя php

Не используйте PHP, добавьте дополнительный настраиваемый журнал , если запрос полностью соответствует вашим требованиям.
Это более правильный способ, и этот пользовательский журнал должен содержать меньшую строку, как статический доступ к файлу не регистрируется. Что напрямую улучшит разбор лога позже.

0 голосов
/ 17 декабря 2010
<?php
  $h = fopen('/path/to/access_log', 'a');
  fwrite($h, 'Message');
  fclose($h);
?>

Другие уже прокомментировали дизайн. Apache access_log предназначен для регистрации доступа Apache, точка.

Я использую около дюжины пользовательских журналов в одном приложении для различных целей мониторинга, анализа производительности и судебных целей. Один файл журнала для каждой цели облегчает анализ журнала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...