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