Log methods
Одинаковые call shapes для встроенных и пользовательских уровней.
trace()debug()info()warn()error()fatal()log(level, ...args)isLevelEnabled(level)@swarmmachina/swm-logs v0.1.1
Структурированный JSON-логгер
Структурированный JSON-логгер для Node.js без runtime-зависимостей. Каждый вызов записывает одну NDJSON-строку в stdout, stderr, файловый дескриптор, writable destination или lifecycle-aware transport.
Выбирайте swm-logs, если нужны стабильный формат событий, совместимые с pino уровни, безопасная сериализация и редакция секретов, дешёвые дочерние логгеры и явное управление доставкой без встроенных сетевых клиентов.
npm install @swarmmachina/swm-logsimport Logger from '@swarmmachina/swm-logs'
const logger = new Logger({
bindings: { service: 'gateway' },
redact: ['req.headers.authorization']
})
const requestLogger = logger.child({ requestId: 'r1' })
requestLogger.info({ port: 3000 }, 'listening')
requestLogger.error(new Error('request failed'))
await logger.close()| Среда | Статус | Примечание |
|---|---|---|
| Node.js 22 / 24 | Поддерживается | Другие major-версии отклоняются engines constraint. |
| Native ESM | Поддерживается | Default и named Logger exports с TypeScript declarations. |
| CommonJS require() | Не поддерживается | Используйте import в ESM-приложении. |
| Runtime-зависимости | 0 | Сетевые клиенты, rotation и vendor exporters не входят в пакет. |
| stdout / stderr / fd / writable | Поддерживается | Выбирается через destination; immediate output включён по умолчанию. |
| Пользовательские transports | Поддерживается | Transport владеет очередью, retry, backpressure, persistence и метриками. |
| Встроенные сетевые transports | Не поставляются | HTTP, БД и vendor delivery остаются в приложении. |
Одинаковые call shapes для встроенных и пользовательских уровней.
trace()debug()info()warn()error()fatal()log(level, ...args)isLevelEnabled(level)Порог, дочерние bindings и снимок эффективного контекста.
levelchild(bindings, options)bindings()Операции общего output state root logger и его children.
flush()flushSync()close()deliveryStats()Уровни, сериализация, редакция, расширения и направления вывода.
customLevelsserializersredacthooksformatterbufferingdestinationtransportsОсновной класс, уровни, console bridge и TypeScript contracts.
LoggerNamedLoggerConsoleBridgeLEVELSLoggerOptionsLogTransportDeliveryStatsПолные сигнатуры, типы и примеры находятся в README и TypeScript declarations исходного репозитория.
Логгер разделяет форматирование события и владение доставкой. Приложение должно явно выбрать границы памяти, durability и момент закрытия root logger.
Если process.stdout.write() возвращает false, pending bytes принадлежат Node.js stream, а логирование продолжается. Для строгого лимита используйте transport с ограниченной очередью.
write(line, level) должен быстро принять запись. Очередь, batching, retry, overflow, persistence, timeout и asynchronous failure metrics принадлежат реализации transport.
Child loggers делят lifecycle с root. Сначала остановите приём работы, дождитесь in-flight операций, затем вызовите await rootLogger.close().
Для fatal exception вызовите flushSync(). Гарантированная durability требует regular file или numeric descriptor; generic writer подтверждает её самостоятельно.
buffering по умолчанию использует 64 КиБ, 1000 мс и flushLevel warn. Один oversized record может временно превысить maxBytes; после попытки записи буфер сбрасывается.
Destination и synchronous transport failures не выходят из log method. Экспортируйте onDestinationError и deliveryStats() в отдельный канал наблюдаемости.
Используйте точные redact paths для известных схем и wildcard только там, где структура действительно динамическая. Caller-owned данные не мутируются.
Числовые уровни совместимы с pino, но surface намеренно меньше: base становится bindings, custom levels вызываются через log(), а workers, pretty printing и vendor transports не включены.
// pino
const previous = pino({ level: 'info', base: { service: 'gateway' } })
// swm-logs
const logger = new Logger({
level: 'info',
bindings: { service: 'gateway' }
})