Files
pinecore/.claude/kb/logging.md
2026-04-06 15:43:45 +03:00

1.9 KiB
Raw Blame History

Логирование

Классы

Файл Класс Описание
src/Log/StdoutLogger.php StdoutLogger JSON → php://stdout
src/Log/FileLogger.php FileLogger JSON → файл
src/Log/CompositeLogger.php CompositeLogger Делегирует нескольким логгерам
src/Log/NullLogger.php NullLogger Отбрасывает все сообщения

Все реализуют Psr\Log\LoggerInterface.

Формат вывода (StdoutLogger)

JSON-строка на каждое сообщение:

{"ts":"2026-04-06T12:00:00.000Z","level":"error","channel":"app","message":"...","context":{...}}
  • ts — ISO 8601 с миллисекундами
  • channel — из log.channel в config (дефолт app)
  • context — сериализуется; Throwable{class, message, file, line, trace}
  • PSR-3 интерполяция {key} из context работает для строк/scalar

Конфигурация

Env / Config key Описание
LOG_LEVEL / log.level Минимальный уровень (debug/info/notice/warning/error/critical/alert/emergency), дефолт debug
LOG_FILE / log.file Путь к файлу → FileLogger включается автоматически
log.channel Имя канала в выводе, дефолт app

Добавление бэкенда

В config/services.php в фабрике LoggerInterface:

LoggerInterface::class => fn($c) => new CompositeLogger(array_filter([
    $c->get(StdoutLogger::class),
    $config->get('log.file') ? $c->get(FileLogger::class) : null,
    // добавить сюда
])),

Использование

// Inject LoggerInterface через DI
$this->logger->error('Something failed', [
    'exception' => $e,
    'path'      => $request->path,
]);