Сейчас мы поговорим о логах всем известного веб-сервера Apache, точнее разберемся подробнее какие типы логов бывают, рассмотрим их уровни логирования и вывод сообщений. На первый взгляд, кажется, что лог сервера Apache представляет собой файл, в который пишется всё последовательно, и это никак не структурировано, однако это далеко не совсем так, и мы в этом сейчас убедимся.
Традиционно Apache создает два основных типа лог-файлов, это error_log и access_log. Как можно понять по названию самих файлов в файл error_log будут журналироваться сообщения об ошибках, а в файл access_log – запросы на веб-сервер. Настраиваются лог файлы в конфигурационном файле веб-сервера Apache, путь к файлу error_log задаются директивой:
LogLevel notice ErrorLog /var/log/httpd/error_log
Стоит отметить, что сообщения об ошибках в свою очередь делятся на уровни, и задаются директивой LogLevel.
Существуют следующие уровни ошибок:
emerg — фатальные ошибки;
alert — необходимо немедленно исправить ситуацию;
crit — критические ошибки;
error — обычные ошибки;
warn — предупреждения;
notice — уведомления;
info — информация;
debug — подробные уведомления для отладки.
В зависимости от операционной системы пути по умолчанию к файлу ErrorLog могут отличаться, некоторые из них:
RHEL / Red Hat / CentOS / Fedora Linux
/var/log/httpd/error_log
Debian / Ubuntu Linux Apache
/var/log/apache2/error.log
FreeBSD
/var/log/httpd-error.log
Второй тип файла лога – лог доступа access_log, устанавливается директивой CustomLog:
LogFormat "%h %l %u %t \"%r\" %>s %b" common CustomLog /var/log/access_log common
Здесь так же можно настроить формат вывода сообщений в лог, за это отвечает директива LogFormat.
Рассмотрим значения, которые могут выводиться в лог файл access_log:
%a # IP адрес клиента
%A # IP адрес сервера
%B # Размер ответа
%b # Размер ответа без HTTP заголовков (только тело)
%{<var>Foobar</var>}C # Значение Куки Foobar
%D # Время обработки запроса в микросекундах
%{<var>FOOBAR</var>}e # Значение переменной окружения FOOBAR
%f # Название файла
%h # Удаленный хост
%H # Протокол запроса
%{<var>Foobar</var>}i # Значение заголовка Foobar: в запросе
%k # Количество keepalive запросов, обработанных в этом соединении
%m # Метод запроса
%{<var>Foobar</var>}n # Значение заметки Foobar из другого модуля
%{<var>Foobar</var>}o # Значение заголовка Foobar: в ответе
%p # Порт на сервере
%{<var>format</var>}p # Порт canonical (сервера), local (текущий сервера) или remote (клиента)
%P # ID дочернего процесса, который обслужил запрос
%q # Строка запроса (query string)
%r # Первая строка запроса
%R # Обработчик, который генерирует ответ
%s # Статус запроса
%t # Время получения запроса
%{<var>format</var>}t # Время получения запроса с форматом
%T # Длительность обслуживания запроса в секундах
%u # Удаленный авторизованный пользователь
%U # Путь запроса без GET параметров
%v # Значение ServerName
%X # Статус соединения после окончания запроса:
# "X" - соединение оборвалось перед окончанием запроса.
# "+" - соединение осталось после отправки ответа (keepalive).
# "-" - соединение закрыто после отправки ответа.
%I # Количество полученных байт включая HTTP заголовки. Нужен mod_logio.
%O # Количество отправленных байт.
Таким образом, формат вывода лога access_log может быть удобно настроен под ваши требования.
Пути по умолчанию к файлу access_log зависят от операционной системы, и могут быть следующие:
RHEL / Red Hat / CentOS / Fedora Linux
/var/log/httpd/access_log
Debian / Ubuntu Linux
/var/log/apache2/access.log
FreeBSD
/var/log/httpd-access.log
Стоит обратить внимание что чем больше данных будет выводиться в лог, тем быстрее будет переполняться лог, а это значит вам стоит учесть так же настройки ротации логов Apache, чтобы не было проблем с чтением при попытке открытия большого файла лога. На этом пока всё, надеюсь материал оказался вам полезен. Если вам понравился пост, вы можете помочь проекту, поделившись им в соц. сетях с друзьями. Спасибо!