interfaces/ILogHandler.md
Интерфейс ILogHandler
Пространство имён: goodboyalex\php_components_pack\interfaces
Версия: 1.0
Доступно с: 1.3
Описание
Интерфейс определяет контракт для обработчиков системы журналирования, которые отвечают за обработку и вывод сообщений журналирования в различные места назначения (файл, консоль, очередь и т.д.).
Свойства интерфейса
formatter
public ILogFormatter $formatter { set; }
Описание: Устанавливает форматер для форматирования сообщений.
config
public array $config { set; }
Описание: Устанавливает конфигурационные параметры обработчика.
Методы интерфейса
handle()
public function handle(MessageType $level, string $message, array $context = []): void
Описание: Обрабатывает и выводит сообщение журналирования.
Параметры:
$level(MessageType) — уровень сообщения (DEBUG, INFO, WARNING, ERROR)$message(string) — текст сообщения$context(array) — контекстные данные сообщения (опционально)
Рекомендации по реализации
-
При реализации интерфейса:
- Обеспечьте корректную обработку всех уровней сообщений
- Реализуйте логику вывода в целевое место назначения
- Используйте установленный форматер для форматирования сообщений
- Обрабатывайте конфигурационные параметры
-
При использовании:
- Настройте форматер перед использованием
- Установите необходимые параметры конфигурации
- Обеспечьте корректную обработку ошибок
Примеры реализации
Файловый обработчик
class FileLogHandler implements ILogHandler
{
// Обработчик сообщений (форматер).
public ILogFormatter $formatter {
get {
return $this->formatter;
}
set {
$this->formatter = $value;
}
}
// Конфигурация
public array $config {
set {
// Устанавливаю имя файла журнала
$this->logFile = $value['file'] ?? 'log.txt';
}
}
// Путь к файлу логов.
private string $logFile;
public function handle (MessageType $level, string $message, array $context = []): void
{
// Получаю форматированную строку
$formatted = $this->formatter->formatMessage($level, $message, $context);
// Создаю запись для журнала
$logLine = "$formatted\n";
// Отправляю в файл
file_put_contents($this->logFile, $logLine, FILE_APPEND);
}
}
Особенности реализации
- Обработчик должен корректно обрабатывать все уровни сообщений
- Необходимо обеспечить асинхронность при необходимости
- Следует учитывать производительность при работе с большими логами
- Важно обеспечить корректную обработку ошибок
Типичные ошибки
- Отсутствие обработки ошибок при записи
- Некорректная работа с контекстными данными
- Потеря сообщений при высокой нагрузке
- Отсутствие синхронизации при многопоточной работе