Строки 25-28. Подпрограмма log_priority (). Эта подпрограмма получает и устанавливает глобальную переменную $priority, управляя порогом регистрации сообщений с заданным приоритетом.
Строки 29-36. Подпрограмма _msg() аналогична подпрограмме _msg (), которая была описана выше, за исключением того, что теперь она отвечает за добавление отметки времени и уровня приоритета к каждой записи журнала.
Строки 37-42. Подпрограмма _log(). Это — внутренняя подпрограмма для записи сообщений в файл журнала. Эта подпрограмма вызывается с одним параметром, содержащим записываемое сообщение. После блокировки файла журнала путем вызова функции flock () с параметром lock_ex в дескриптор файла выводится сообщение с помощью функции print (), а затем блокировка освобождается путем повторного вызова функции flock() с параметром lock_un.
Строки 43-59. Подпрограммы log__debug(), log_notice(), log_warn(), log_di () в связке nginx и apache . Каждая из этих подпрограмм принимает сообщение об ошибке в формате функций warn() или die (). Если значение $priority выше приоритета сообщения, не выполняется никаких действий. В ином случае вызывается подпрограмма _msg() для форматирования сообщения и передачи результата подпрограмме _log () для записи в файл журнала. Подпрограмма log_die() выполняет дополнительное действие— вызывает встроенную функцию die () для аварийного завершения программы.
Установка привилегий пользователя
Иногда сетевое приложение необходимо эксплуатировать с привилегиями пользователя root (суперпользователя). Обычно это обусловлено следующими причинами.
1) Чтобы открыть сокет в привилегированный порт, необходимо выполнить привязку приложения к стандартному порту в зарезервированном диапазоне 1 ... 1023, например к порту HTTP (Web) номер 80. Для этого в системах UNIX приложение должно выполняться с правами пользователя root.
2) Чтобы открыть файл журнала или файл может потребоваться создать подобный файл в каталоге, к которому имеет доступ только привилегированный пользователь, например в каталоге /var/run. Для создания файла и открытия его для записи приложение должно работать с правами пользователя root.