Распределенное логирование для apache и PHP

Итак, задача: Надо сделать так, чтобы ошибки апача писались в логи апача, а ошибки PHP писались в логи php. По умолчанию, если в php.ini директива error_log не существует, или закоментирована, то все ошибки PHP будут писаться в стандартный лог апача, опять же, если он тоже включен, ведь может быть такая ситуация, когда и ошибки апача никуда не пишутся :). И еще момент, надо также сделать чтобы все это было применимо к нашим виртуальным хостам. Приступим.

Правим php.ini:

#по умолчанию ставим логирование только важных, критичных ошибок
error_reporting = E_WARNING
#Отключаем отображение ошибок в браузере
display_errors = Off
display_startup_errors = Off
#Включаем логирование ошибок в файл (куда - укажем ниже)
log_errors = On
#Указываем максимальный объем файла логов, более ранние записи будут удаляться
log_errors_max_len = 1024
#Путь, куда будет сохраняться лог ошибок
error_log = "/www/log/php_errors.log"
#Фиксировать ошибки об утечках памяти (лучше отключить)
report_memleaks = Off

Правим httpd.conf:

#Устанавливаем уровень информативности логируемых ошибок
#их есть немного: emerg, alert, crit, error, warn, notice, info, debug, от самого критичного до самого информативного
LogLevel crit
#Указываем путь, куда будут складываться логи апача (не для виртуальных хостов)
ErrorLog "/www/log/httpd-error.log"
#Устанавливаем формат записи ошибок
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "/www/log/httpd-access.log" combinedio
</IfModule>

Правим виртуальный хост:

Открываем файл виртуальных хостов, это может быть /usr/local/etc/apache22/extra/httpd-vhosts.conf

#У меня виртуальные хосты основаны на именах, то есть NameBased
<VirtualHost *:80>
    ....
    #Устанавливаем уровень информативности логирования ошибок для данного виртуального хоста
    LogLevel warn
    #Указываем путь к файлу логов ошибок апача данного виртуального хоста
    ErrorLog "/www/sites/siza.100.org.ua/log/error.log"
    #Указываем куда мы будем складировать статистику заходов на наш виртуальный хост, и уровень информативности
    #combinedio - определяется в файле httpd.conf (версия apache 2.2)
    CustomLog "/www/sites/siza.100.org.ua/log/access.log" combinedio
    #Указываем, куда должны складироваться ошибки PHP
    php_value error_log "/www/sites/siza.100.org.ua/log/php_errors.log"
    #Объем файла ошибок PHP
    php_value log_errors_max_len 2048
    ....
</VirtualHost>

Вот и все! Поздравляю, теперь ваши ошибки PHP будут писаться для каждого виртуального хоста в свою определенную папочку и свои файлы логов, а ошибки и статистика заходов с apache – в свои файлы логов.

Leave a Reply