Skip to content

LogLayerUnifies Logging

A layer on top of Javascript logging libraries to provide a consistent logging experience.

LogLayer

javascript
// Example using the Pino logging library with LogLayer
// You can also start out with a console logger and swap to another later!
import { LogLayer } from 'loglayer';
import { pino } from 'pino';
import { PinoTransport } from '@loglayer/transport-pino';
import { redactionPlugin } from '@loglayer/plugin-redaction';

const log = new LogLayer({
  // Multiple loggers can also be used at the same time. 
  transport: new PinoTransport({
    logger: pino()
  }),
  // Plugins modify log data before it's shipped to your logging library.
  plugins: [
    redactionPlugin({
      paths: ['password'],
      censor: '[REDACTED]',
    }),
  ],
  // Put context data in a specific field (default is flattened)
  contextFieldName: 'context',
  // Put metadata in a specific field (default is flattened)
  metadataFieldName: 'metadata',
})

// persisted data that is always included in logs
log.withContext({
  path: "/",
  reqId: "1234"
})

log.withPrefix("[my-app]")
  .withError(new Error('test'))
  // data that is included for this log entry only
  .withMetadata({ some: 'data', password: 'my-pass' })
  // Non-object data only (numbers and strings only)
  // this can be omitted to just log an object / error
  // by using .errorOnly() / .metadataOnly() instead of withError() / withMetadata()
  .info('my message')
json5
{
  "level": 30,
  "time": 1735857465669,
  "msg": "[my-app] my message",
  "context": {
    "path": "/",
    "reqId": "1234",
  },
  "metadata": {
    "password": "[REDACTED]",
    "some": "data",    
  },
  "err":{
    "type": "Error",
    "message": "test",
    "stack": "Error: test\n ..."
  }
}

Logging Libraries

NamePackageChangelogDescription
AWS Lambda Powertools LoggernpmChangelogLogging for AWS Lambdas
BunyannpmChangelogJSON logging library for Node.js
ConsoleBuilt-inN/ASimple console-based logging for development
ConsolanpmChangelogElegant console logger for Node.js and browser
Electron-lognpmChangelogLogging library for Electron applications
Log4jsnpmChangelogPort of Log4j framework to Node.js
loglevelnpmChangelogMinimal lightweight logging for JavaScript
PinonpmChangelogVery low overhead Node.js logger
RoarrnpmChangelogJSON logger for Node.js and browser
SignalenpmChangelogHighly configurable CLI logger
tslognpmChangelogPowerful, fast and expressive logging for TypeScript and JavaScript
TracernpmChangelogTracer logging library for Node.js
WinstonnpmChangelogA logger for just about everything

Cloud Providers

NamePackageChangelogDescription
AxiomnpmChangelogSend logs to Axiom cloud logging platform
DatadognpmChangelogServer-side logging for Datadog
Datadog Browser LogsnpmChangelogBrowser-side logging for Datadog
DynatracenpmChangelogServer-side logging for Dynatrace
Google Cloud LoggingnpmChangelogServer-side logging for Google Cloud Platform
New RelicnpmChangelogServer-side logging for New Relic
Sumo LogicnpmChangelogSend logs to Sumo Logic via HTTP Source

Other Transports

NamePackageChangelogDescription
Log File RotationnpmChangelogWrite logs to local files with rotation support
OpenTelemetrynpmChangelogSend logs using the OpenTelemetry Logs SDK

Available Plugins

NamePackageChangelogDescription
FilternpmChangelogFilter logs using string patterns, regular expressions, or JSON Queries
OpenTelemetrynpmChangelogAdd OpenTelemetry trace context to logs
SprintfnpmChangelogPrintf-style string formatting support
RedactionnpmChangelogRedact sensitive information from logs