@fab33/fab-logger v2.0.0
@fab33/fab-logger :: Подсистема логирования (FAB-LOGGER.md, v2.0.0)
- HISTORY:
- v2.0.0 (2025-06-12): BREAKING CHANGE. Переход на плагинную архитектуру с "чистым" ядром и опциональными транспортами.
- v1.1.1 (2025-06-12): Документирован новый тип транспорта
console-inline. - v1.1.0 (2025-06-12): Добавлен транспорт
console-inlineдля совместимости со средами без поддержки воркеров (Next.js RSC). - v1.0.0 (2025-06-11): Полное переписывание документации после миграции на TypeScript,
fab-errorsиtlogger.
🎯 1. Введение
@fab33/fab-logger v2.0.0 — это полностью переработанная, современная и универсальная подсистема логирования. В основе новой версии лежит плагинная архитектура, которая обеспечивает максимальную гибкость и совместимость с различными средами выполнения, включая Node.js, Next.js (RSC), Edge-функции и другие.
Ключевые особенности v2.0.0:
- ✨ Чистое ядро: Основной пакет
@fab33/fab-loggerявляется полностью изоморфным и не имеет зависимостей от Node.js API. - 🔌 Плагины-транспорты: Функциональность вывода логов (в консоль, файлы) вынесена в опциональные модули, подключаемые через суб-экспорты.
- 🚀 Умная
env-обертка: Для удобства и обратной совместимости предоставляется асинхронная обертка, которая автоматически конфигурирует логгер на основе переменных окружения. - 🔧 Отладка: Встроенный механизм отладки самого логгера через переменную
DEBUG_LOGGER. - 🔒 Типизация и надежность: Пакет написан на TypeScript и интегрирован с
@fab33/tloggerи@fab33/fab-errors.
📥 2. Установка
Сначала установите ядро:
npm install @fab33/fab-loggerЗатем установите необходимые вам транспорты:
# Для красивого вывода в консоль в Node.js
npm install pino-pretty
# Для записи в файлы (если нужно)
# Зависимости fs, path, os уже встроены в Node.jsПримечание:
pino-prettyтеперь является peer-зависимостью для транспортаpretty.
🚀 3. Способы использования
3.1. Простой способ (Рекомендуется для большинства проектов)
Этот способ использует "умную" обертку, которая делает все за вас на основе переменных окружения.
1. Измените импорт в вашем коде:
// Было: import { createLogger } from '@fab33/fab-logger';
// Стало:
import { createLogger } from '@fab33/fab-logger/env';
// Функция теперь асинхронная!
async function initialize() {
const logger = await createLogger('my-app:module');
logger.info('Logger is ready!');
}
initialize();2. Настройте .env файл:
# Укажите, какие транспорты использовать. Обертка сама их найдет.
TRANSPORT1=pretty
TRANSPORT1_LEVEL=debug
TRANSPORT2=file
TRANSPORT2_FILENAME=app.log
# Включите отладку для нужных модулей
DEBUG=my-app:*Обертка автоматически найдет и сконфигурирует транспорты pretty и file. Если какой-то транспорт сконфигурирован, но не установлен, вы увидите предупреждение в консоли, и приложение не упадет.
3.2. Продвинутый способ (Полный контроль)
Этот способ подходит для сложных сценариев или сред, где нет доступа к process.env. Вы вручную импортируете транспорты и передаете их в "чистую" createLogger.
import { createLogger } from '@fab33/fab-logger';
import createPrettyTransport from '@fab33/fab-logger/transport/pretty';
import createFileTransport from '@fab33/fab-logger/transport/file';
import type { PinoTransport } from '@fab33/tlogger';
async function initialize() {
// 1. Создаем инстансы транспортов вручную
const prettyTransport = createPrettyTransport({ level: 'info', colorize: true });
const fileTransport = await createFileTransport({ level: 'error', filename: 'errors.log' });
const transports: PinoTransport[] = [prettyTransport, fileTransport];
// 2. Передаем их в "чистый" логгер
const logger = createLogger('my-app:module', {
transports: transports,
logLevel: 'info',
debugString: 'my-app:*'
});
logger.info('Logger configured manually.');
}
initialize();⚙️ 4. Конфигурация транспортов (через /env)
При использовании обертки @fab33/fab-logger/env, конфигурация по-прежнему осуществляется через переменные TRANSPORT{N}.
Поддерживаемые типы транспортов (type)
pretty: Красивый вывод в консоль. Требует установкиpino-pretty.file: Запись в файл. Использует встроенные модули Node.js.console-simple: Встроенный, максимально простой и совместимый вывод вconsole.logбез внешних зависимостей. Идеально для serverless-сред или отладки.
Пример для Next.js RSC / Vercel Functions:
Чтобы избежать ошибок, используйте console-simple, который гарантированно работает везде.
TRANSPORT1=console-simple
TRANSPORT1_LEVEL=trace
DEBUG=*🔧 5. Отладка самого логгера
Если логгер ведет себя не так, как ожидалось, вы можете включить его внутреннюю отладку:
DEBUG_LOGGER=true pnpm devЭто выведет в консоль подробную информацию о том, как парсится конфигурация и инициализируются транспорты.