IO\Event — Логирование событий
Внимание
Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!
Обзор
IO\Event — статический класс для логирования событий. Поддерживает несколько обработчиков: echo, file, error_log, syslog, custom. Формат сообщения: [timestamp] [LEVEL] message context.
Константы
Уровни логирования
| Константа | Значение | Описание |
|---|---|---|
LOG_DEBUG | 0 | Отладочная информация |
LOG_INFO | 1 | Информационные сообщения |
LOG_WARNING | 2 | Предупреждения |
LOG_ERROR | 3 | Ошибки |
LOG_CRITICAL | 4 | Критические ошибки |
Типы обработчиков
| Константа | Описание |
|---|---|
HANDLER_ECHO | Вывод на экран (HTML) |
HANDLER_FILE | Запись в файл с ротацией |
HANDLER_ERROR_LOG | Через PHP error_log() |
HANDLER_SYSLOG | Через syslog |
HANDLER_CUSTOM | Пользовательский callback |
Свойства
| Свойство | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$loglevel | int | LOG_DEBUG | Нет | Минимальный уровень логирования |
$echo | int | 0 | Нет | Включить вывод на экран (1=вкл) |
$logFile | string | '/var/log/io7/app.log' | Нет | Путь к файлу логов |
$logMaxSize | int | 10485760 (10MB) | Нет | Максимальный размер файла |
Методы
start(): void
Инициализация обработчиков по умолчанию. Вызывается один раз при старте.
\IO\Event::start();
addHandler(string $type, ?callable $callback = null): void
Добавить обработчик логирования.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$type | string | — | Да | Тип обработчика (HANDLER_*) |
$callback | callable|null | null | Нет | Пользовательский callback (для HANDLER_CUSTOM) |
\IO\Event::addHandler('file');
\IO\Event::addHandler('syslog');
\IO\Event::addHandler('custom', function (int $level, string $message, array $context): void {
sendToExternalSystem($message);
});
removeHandler(string $type): void
Удалить обработчик логирования.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$type | string | — | Да | Тип обработчика |
\IO\Event::removeHandler('echo');
log(array $params): void
Логирование сообщения с произвольным уровнем.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$params | array<string, mixed> | — | Да | Параметры: level, msg, context |
\IO\Event::log([
'level' => 'warning',
'msg' => 'Медленный запрос',
'context' => ['duration' => '2.5s', 'query' => 'SELECT * FROM users'],
]);
debug(string $message, array $context = []): void
Логирование debug сообщения.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$message | string | — | Да | Сообщение |
$context | array<string, mixed> | [] | Нет | Контекст |
\IO\Event::debug('Параметры запроса', ['params' => $params]);
info(string $message, array $context = []): void
Логирование info сообщения.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$message | string | — | Да | Сообщение |
$context | array<string, mixed> | [] | Нет | Контекст |
\IO\Event::info('Запрос обработан', ['user_id' => 123]);
warning(string $message, array $context = []): void
Логирование warning сообщения.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$message | string | — | Да | Сообщение |
$context | array<string, mixed> | [] | Нет | Контекст |
\IO\Event::warning('Медленный запрос', ['duration' => '2.5s']);
error(string $message, array $context = []): void
Логирование error сообщения.
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$message | string | — | Да | Сообщение |
$context | array<string, mixed> | [] | Нет | Контекст |
\IO\Event::error('Ошибка подключения к БД', ['host' => 'localhost']);
echo(string $msg): void
Вывод на экран (если включён).
| Параметр | Тип | Значение по умолчанию | Обязателен | Описание |
|---|---|---|---|---|
$msg | string | — | Да | Сообщение |
\IO\Event::echo('Текущее время выполнения');
Примеры
Простое логирование
\IO\Event::start();
\IO\Event::info('Приложение запущено');
\IO\Event::error('Ошибка подключения');
С пользовательским обработчиком
\IO\Event::addHandler('custom', function (int $level, string $message, array $context): void {
$botToken = getenv('TELEGRAM_BOT_TOKEN');
$chatId = getenv('TELEGRAM_CHAT_ID');
$text = "[{$level}] {$message}";
if (!empty($context)) {
$text .= "\n" . json_encode($context, JSON_UNESCAPED_UNICODE);
}
file_get_contents("https://api.telegram.org/bot{$botToken}/sendMessage?chat_id={$chatId}&text=" . urlencode($text));
});
\IO\Event::error('Критическая ошибка', ['service' => 'payment']);
Логирование в файл с ротацией
\IO\Event::addHandler('file');
\IO\Event::$logFile = '/var/log/myapp/app.log';
\IO\Event::$logMaxSize = 5242880; // 5MB
// Формат в файле:
// [2024-01-15 10:30:45] [ERROR] Ошибка подключения {"host":"localhost","port":3306}
Настройка уровня логирования
\IO\Event::$loglevel = \IO\Event::LOG_WARNING;
\IO\Event::debug('Это не будет записано');
\IO\Event::warning('Это будет записано');
\IO\Event::error('И это тоже');
Логирование в syslog
\IO\Event::addHandler('syslog');
// сообщения отправляются через openlog/closelog
// Формат: IO7: [ERROR] сообщение