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 ..."
  }
}

Use the Pretty Terminal Transport to view logs in the terminal with filtering and detailed viewing capabilities.

Built-in Transports

NameDescription
Console Browser ServerSimple console-based logging for development
Blank Transport Browser ServerFor quickly creating / prototyping new transports

Logging Libraries

NamePackageChangelogDescription
AWS Lambda Powertools Logger ServernpmChangelogLogging for AWS Lambdas
Bunyan Browser ServernpmChangelogJSON logging library for Node.js
Consola ServernpmChangelogElegant console logger for Node.js and browser
Electron-log ServernpmChangelogLogging library for Electron applications
Log4js ServernpmChangelogPort of Log4j framework to Node.js
loglevel Browser ServernpmChangelogMinimal lightweight logging for JavaScript
Pino Browser ServernpmChangelogVery low overhead Node.js logger
Roarr Browser ServernpmChangelogJSON logger for Node.js and browser
Signale ServernpmChangelogHighly configurable CLI logger
tslog Browser ServernpmChangelogPowerful, fast and expressive logging for TypeScript and JavaScript
Tracer ServernpmChangelogTracer logging library for Node.js
Winston Browser ServernpmChangelogA logger for just about everything

Cloud Providers

NamePackageChangelogDescription
Axiom ServernpmChangelogSend logs to Axiom cloud logging platform
Datadog ServernpmChangelogServer-side logging for Datadog
Datadog Browser Logs BrowsernpmChangelogBrowser-side logging for Datadog
Dynatrace ServernpmChangelogServer-side logging for Dynatrace
Google Cloud Logging ServernpmChangelogServer-side logging for Google Cloud Platform
New Relic ServernpmChangelogServer-side logging for New Relic
Sumo Logic ServernpmChangelogSend logs to Sumo Logic via HTTP Source
VictoriaLogs ServernpmChangelogSend logs to VictoriaLogs by Victoria Metrics using JSON stream API

Other Transports

NamePackageChangelogDescription
HTTP Browser ServernpmChangelogGeneric HTTP transport with batching, compression, and retry support
Log File Rotation ServernpmChangelogWrite logs to local files with rotation support
OpenTelemetry ServernpmChangelogSend logs using the OpenTelemetry Logs SDK
Pretty Terminal ServernpmChangelogPretty prints logs in the terminal with text search / advanced interactivity.
Simple Pretty Terminal Browser ServernpmChangelogPretty prints logs in the browser / terminal / Next.js.

Available Plugins

NamePackageChangelogDescription
Datadog APM Trace Injector ServernpmChangelogAutomatically inject Datadog APM trace context into logs for correlation
Filter Browser ServernpmChangelogFilter logs using string patterns, regular expressions, or JSON Queries
OpenTelemetry ServernpmChangelogAdd OpenTelemetry trace context to logs
Redaction Browser ServernpmChangelogRedact sensitive information from logs
Sprintf Browser ServernpmChangelogPrintf-style string formatting support

LogLayer is made with ❤️ by Theo Gravity.