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) — контекстные данные сообщения (опционально)

Рекомендации по реализации

  1. При реализации интерфейса:

    • Обеспечьте корректную обработку всех уровней сообщений
    • Реализуйте логику вывода в целевое место назначения
    • Используйте установленный форматер для форматирования сообщений
    • Обрабатывайте конфигурационные параметры
  2. При использовании:

    • Настройте форматер перед использованием
    • Установите необходимые параметры конфигурации
    • Обеспечьте корректную обработку ошибок

Примеры реализации

Файловый обработчик

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);
        }
}

Особенности реализации

  • Обработчик должен корректно обрабатывать все уровни сообщений
  • Необходимо обеспечить асинхронность при необходимости
  • Следует учитывать производительность при работе с большими логами
  • Важно обеспечить корректную обработку ошибок

Типичные ошибки

  • Отсутствие обработки ошибок при записи
  • Некорректная работа с контекстными данными
  • Потеря сообщений при высокой нагрузке
  • Отсутствие синхронизации при многопоточной работе

На главную | Содержание