npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@fab33/fab-logger

v2.0.1

Published

A modern, flexible logging system with a pluggable transport architecture.

Readme

@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

Это выведет в консоль подробную информацию о том, как парсится конфигурация и инициализируются транспорты.