Справочник API
Каждый публичный класс и метод в Winter Logger. Все типы живут в пространстве имён
Flytachi\Winter\Logger.
LoggerManager
Строит и кэширует по одному каналу Monolog на запись конфига. Иммутабелен на уровне конфига —
методы with* возвращают новые экземпляры. Каждый построенный канал автоматически получает
ContextInjectingProcessor.
Конструктор
new LoggerManager(
ContextStorage $contextStorage,
array $channels = []
)| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
$contextStorage |
ContextStorage |
— | Изоляция контекста под рантайм (ProcessContext / CoroutineContext). |
$channels |
array<string, array> |
[] |
Конфиги каналов по имени канала. См. Конфиг канала. |
Методы
| Метод | Возвращает | Описание |
|---|---|---|
channel(string $name) |
LoggerInterface |
Лениво строит и кэширует логгер канала. Бросает InvalidArgumentException, если $name не настроен. Возвращает NullLogger, если Monolog отсутствует. |
hasChannel(string $name) |
bool |
Зарегистрирован ли $name. |
contextStorage() |
ContextStorage |
Текущее хранилище контекста. |
withContextStorage(ContextStorage $s) |
self |
Новый менеджер, те же каналы, другое хранилище. |
withChannel(string $name, array $config) |
self |
Новый менеджер с добавленным или переопределённым каналом. |
flush() |
void |
Сбрасывает все закэшированные экземпляры каналов; пересоберутся лениво при следующем channel(). |
Лениво и с кэшем
channel() строит экземпляр Monolog при первом вызове и кэширует его; последующие вызовы
возвращают тот же объект. flush() очищает этот кэш — полезно после перезагрузки конфига в демоне.
LoggerFactory
Статический Java-подобный фасад. Не инстанцируется. Хранит активный менеджер, канал по
умолчанию (изначально 'cli') и поклассовый кэш логгеров по ключу "channel:FQCN".
Методы настройки
| Метод | Возвращает | Описание |
|---|---|---|
setManager(LoggerManager $m) |
void |
Регистрирует менеджер. Вызывать один раз на бутстрапе. Очищает кэш. |
setDefaultChannel(string $ch) |
void |
Задаёт канал, используемый когда канал не указан. Очищает кэш. |
setContextStorage(ContextStorage $s) |
void |
Подменяет хранилище на текущем менеджере (те же каналы). Очищает кэш. |
addChannel(string $name, array $cfg) |
void |
Добавляет/переопределяет канал на текущем менеджере. Очищает кэш. |
reset() |
void |
Очищает только поклассовый кэш логгеров. |
Методы доступа
getLogger(string|object $class, ?string $channel = null): LoggerInterfaceЛоггер на класс. $class может быть строкой FQCN, константой ::class или объектом
(используется его класс). Кэшируется по "channel:FQCN".
- Если
$channelзадан и зарегистрирован → используется он. - Если
$channelравенnullили не зарегистрирован → откат к каналу по умолчанию (без исключения). - Отрисовывает
(ShortName)в строке; хранит полный FQCN вcontext['class'].
| Метод | Возвращает | Описание |
|---|---|---|
channel(string $name) |
LoggerInterface |
Сырой логгер канала, без метки класса. Бросает, если $name не зарегистрирован. |
logger() |
LoggerInterface |
Сырой логгер текущего канала по умолчанию (используется Log). |
contextStorage() |
ContextStorage |
Хранилище контекста текущего менеджера. |
getLogger откатывается, channel — нет
getLogger($c, 'missing') молча использует канал по умолчанию. channel('missing') бросает
InvalidArgumentException. Неинициализированная фабрика (setManager не вызывался) бросает
RuntimeException.
Log
Статический фасад — однострочный шорткат к каналу по умолчанию через LoggerFactory::logger().
Не инстанцируется, метка класса не прикрепляется.
| Метод | Сигнатура |
|---|---|
Log::debug |
(string $message, array $context = []): void |
Log::info |
(string $message, array $context = []): void |
Log::notice |
(string $message, array $context = []): void |
Log::warning |
(string $message, array $context = []): void |
Log::error |
(string $message, array $context = []): void |
Log::critical |
(string $message, array $context = []): void |
Log::alert |
(string $message, array $context = []): void |
Нет Log::emergency
Фасад Log покрывает уровни от debug до alert. Для уровня emergency используйте
экземпляр логгера — например, LoggerFactory::logger()->emergency(...) или
getLogger(self::class)->emergency(...), это полноценные PSR-3-логгеры.
Logger
PSR-3-обёртка, возвращаемая менеджером и фабрикой. Реализует
Flytachi\Winter\Logger\Contracts\LoggerInterface (расширяющий Psr\Log\LoggerInterface).
Вливает привязанный контекст в каждый вызов.
Конструктор
new Logger(
\Monolog\Logger $monolog,
ContextStorage $contextStorage,
array $boundContext = []
)Методы
| Метод | Возвращает | Описание |
|---|---|---|
withContext(array $context) |
static |
Новый логгер с $context, влитым в каждый вызов. Не мутирует исходный. |
log(mixed $level, string|Stringable $message, array $context = []) |
void |
PSR-3-лог. Привязанный контекст вливается под context вызова (при конфликте ключей побеждает вызов). |
monolog() |
\Monolog\Logger |
Нижележащий экземпляр Monolog (чтобы навесить процессоры/обработчики). |
Плюс все шорткаты уровней PSR-3 (debug, info, notice, warning, error, critical,
alert, emergency) через трейт LoggerTrait из Monolog.
$log = LoggerFactory::getLogger(self::class)->withContext(['request_id' => $id]);
$log->info('processing'); // несёт request_idContextStorage
Интерфейс контекста на единицу исполнения. Пространство имён Flytachi\Winter\Logger\Contracts.
| Метод | Возвращает | Описание |
|---|---|---|
set(string $key, mixed $value) |
void |
Сохранить поле. |
get(string $key, mixed $default = null) |
mixed |
Прочитать поле. |
all() |
array |
Снимок всех полей. |
forget(string $key) |
void |
Удалить одно поле. |
clear() |
void |
Удалить все поля. Вызывать в конце каждого запроса/задачи/корутины. |
ProcessContext
Один плоский массив на процесс. Безопасен для FPM (запрос = процесс) и разовых CLI-задач. В
демонах-циклах — clear() между итерациями. Небезопасен для Swoole.
CoroutineContext
Хранит контекст в Swoole\Coroutine::getContext() — один мешок на корутину, автоматически
уничтожаемый при её завершении. Откатывается к статическому массиву вне корутины (бутстрап,
onWorkerStart). Требует ext-swoole. См.
Корутины Swoole.
Процессоры
Пространство имён Flytachi\Winter\Logger\Processor. Оба реализуют ProcessorInterface из Monolog.
ContextInjectingProcessor
Добавляется к каждому каналу автоматически. Вливает снимок ContextStorage в extra каждой
записи. Раннее завершение (нулевая нагрузка), когда контекст не задан.
new ContextInjectingProcessor(ContextStorage $storage)SensitiveMaskingProcessor
Опционален. Скрывает чувствительные ключи (регистронезависимо, рекурсивно) в context и
extra, заменяя значения на ***.
new SensitiveMaskingProcessor(array $extraKeys = [])$extraKeys объединяются со значениями по умолчанию. См.
Маскируемые ключи и
Маскирование данных.
Фабрики
Пространство имён Flytachi\Winter\Logger\Factory.
HandlerFactory
HandlerFactory::make(array $config): \Monolog\Handler\HandlerInterfaceОтображает output на обработчик: stdout/stderr → SafeStreamHandler, syslog →
SyslogHandler, file → RotatingFileHandler, null → NullHandler. Бросает
InvalidArgumentException при неизвестном output или при output=file без file_path.
FormatterFactory
FormatterFactory::make(string $format, bool $appendNewline = true): \Monolog\Formatter\FormatterInterface'line' → SpringLineFormatter, 'json' → JsonFormatter из Monolog (режим построчной
пачки). Передайте $appendNewline = false для syslog (он сам обрамляет сообщения). Бросает
InvalidArgumentException при неизвестном формате.
Обработчик и форматтер
SafeStreamHandler(Flytachi\Winter\Logger\Handler) — расширяетStreamHandlerиз Monolog; переопределяетstreamWrite(), чтобы использовать@fwriteи никогда не бросать на разорванном потоке. См. Вывод и broken pipe.SpringLineFormatter(Flytachi\Winter\Logger\Formatter) — однострочный формат в стиле Spring Boot. Конструктор:new SpringLineFormatter(bool $appendNewline = true). См. Формат логов.