Spec-Zone.ru › CodeIgniter 4

Информация о регистрации

  • Настройка
    • Использование нескольких обработчиков логов
  • Изменение сообщения с контекстом
  • Использование логгеров сторонних разработчиков

Вы можете записывать информацию в локальные файлы журнала, используя метод log_message(). Вы должны указать «уровень» ошибки в первом параметре, указывая тип сообщения (отладка, ошибка и т. д.). Второй параметр — само сообщение:

if ($some_var === '') {
    log_message('error', 'Some variable did not contain a value.');
}

Существует восемь различных уровней журналов, соответствующих уровням RFC 5424, и они следующие:

Уровень Описание
debug Подробная информация об отладке.
info Интересные события в вашем приложении, такие как вход пользователя, регистрация SQL-запросов и т. д.
notice Нормальные, но значимые события в вашем приложении.
warning Исключительные случаи, которые не являются ошибками, такие как использование устаревших API, неэффективное использование API или другие нежелательные вещи, которые не обязательно являются ошибками.
error Ошибки выполнения, которые не требуют немедленных действий, но обычно должны быть зарегистрированы и отслеживаются.
critical Критические ситуации, такие как недоступность компонента приложения или непредвиденная ошибка.
alert Немедленные действия необходимы, например, при отключении всего веб-сайта, недоступности базы данных и т. д.
emergency Система непригодна для использования.

Система регистрации не предоставляет способов оповещения системных администраторов или веб-мастеров об этих событиях, она только регистрирует информацию. Для многих более критических уровней событий регистрация происходит автоматически обработчиком ошибок, описанным выше.

Настройка

Вы можете изменить уровни, которые фактически регистрируются, а также назначить разные логгеры для обработки разных уровней в файле конфигурации app/Config/Logger.php.

Значение threshold файла конфигурации определяет, какие уровни регистрируются во всем приложении. Если приложение запрашивает регистрацию каких-либо уровней, но порог не позволяет их регистрировать в данный момент, они будут проигнорированы. Простейший способ — установить это значение на минимальный уровень, который вы хотите регистрировать. Например, если вы хотите регистрировать предупреждения, а не информационные сообщения, вы установите порог на 5. Любые запросы регистрации с уровнем 5 или менее (включая ошибки выполнения, системные ошибки и т. д.) будут регистрироваться, а info, notice и debug будут проигнорированы:

public $threshold = 5;

Полный список уровней и соответствующих им значений порога находится в файле конфигурации для справки.

Вы можете выбирать конкретные уровни, которые вы хотите регистрировать, назначив массив номеров уровней логов значению порога:

// Log only debug and info type messages
public $threshold = [5, 8];

Использование нескольких обработчиков логов

Система регистрации может поддерживать несколько способов обработки регистрации, работающих одновременно. Каждый обработчик может быть настроен на обработку определенных уровней и игнорирование остальных. В настоящее время при установке по умолчанию есть три обработчика:

  • File Handler — это обработчик по умолчанию и создает один файл для каждого дня локально. Это рекомендуемый метод регистрации.
  • ChromeLogger Handler Если у вас установлен расширение ChromeLogger в веб-браузере Chrome, вы можете использовать этот обработчик для отображения информации о регистрации в консоли Chrome.
  • Errorlog Handler Этот обработчик использует встроенную функцию PHP error_log() и записывает журналы туда. В настоящее время поддерживаются только типы сообщений 0 и 4 error_log().

Обработчики настраиваются в основном файле конфигурации в свойстве $handlers, представляющем собой массив обработчиков и их конфигурации. Каждый обработчик указывается с использованием имени класса с полным пространством имен в качестве ключа. Значение будет массивом различных свойств, специфичных для каждого обработчика. У каждого обработчика будет одно общее свойство: handles, представляющее собой массив имён уровней регистрации, для которых обработчик будет регистрировать информацию.

public $handlers = [
    // File Handler
    'CodeIgniter\Log\Handlers\FileHandler' => [
        'handles' => ['critical', 'alert', 'emergency', 'debug', 'error', 'info', 'notice', 'warning'],
    ]
];

Изменение сообщения с контекстом

Вам часто нужно изменять детали сообщения в зависимости от контекста события, которое регистрируется. Возможно, вам потребуется записать идентификатор пользователя, IP-адрес, текущие переменные POST и т. д. Вы можете сделать это, используя плейсхолдеры в вашем сообщении. Каждый плейсхолдер должен быть заключен в фигурные скобки. В третьем параметре вы должны предоставить массив имён плейсхолдеров (без фигурных скобок) и их значений. Они будут вставлены в строку сообщения:

// Generates a message like: User 123 logged into the system from 127.0.0.1
$info = [
    'id' => $user->id,
    'ip_address' => $this->request->ip_address()
];

log_message('info', 'User {id} logged into the system from {ip_address}', $info);

Если вы хотите регистрировать исключение или ошибку, вы можете использовать ключ «exception», значением которого является само исключение или ошибка. Из этого объекта будет сгенерирована строка, содержащая сообщение об ошибке, имя файла и номер строки. Вы по-прежнему должны предоставить плейсхолдер исключения в сообщении:

try {
    // Something throws error here
} catch (\Exception $e) {
    log_message('error', '[ERROR] {exception}', ['exception' => $e]);
}

Существуют несколько основных плейсхолдеров, которые будут автоматически расширены для вас на основе текущего запроса страницы:

Плейсхолдер Вставленное значение
{post_vars} Переменные $_POST
{get_vars} Переменные $_GET
{session_vars} Переменные $_SESSION
{env} Текущее имя среды, например, development
{file} Имя файла, вызывающего логгер
{line} Строка в {file}, где был вызван логгер
{env:foo} Значение ‘foo’ в $_ENV

Использование логгеров сторонних разработчиков

Вы можете использовать любой другой логгер, который вам может понадобиться, при условии, что он расширяет Psr\Log\LoggerInterface и совместим с PSR3. Это означает, что вы можете легко использовать любой PSR3-совместимый логгер или создать свой собственный.

Вы должны убедиться, что сторонний логгер доступен системе, добавив его в файл конфигурации app/Config/Autoload.php или через другой автозагрузчик, например, Composer. Далее, вы должны изменить app/Config/Services.php, чтобы указать псевдоним logger на ваше новое имя класса.

Теперь любой вызов функции log_message() будет использовать вашу библиотеку вместо стандартной.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/general/logging.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API