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.

Add Metrics Support with Mixins

Extend LogLayer with StatsD metrics support using the Hot Shots Mixin:

typescript
import { LogLayer, useLogLayerMixin, ConsoleTransport } from 'loglayer';
import { StatsD } from 'hot-shots';
import { hotshotsMixin } from '@loglayer/mixin-hot-shots';

// Create a StatsD client
const statsd = new StatsD({
  host: 'localhost',
  port: 8125
});

// Register the mixin (must be called before creating LogLayer instances)
useLogLayerMixin(hotshotsMixin(statsd));

// Create LogLayer instance
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console
  })
});

// Use StatsD methods through the stats property
log.stats.increment('request.count').send();
log.info('Request received');
log.stats.timing('request.duration', 150).send();
log.info('Request processed');
log.stats.gauge('active.connections', 42).send();
log.info('Connection established');

Built-in Transports

NameDescription
Console Browser Server Deno BunSimple console-based logging for development
Blank Transport Browser Server Deno BunFor quickly creating / prototyping new transports

Logging Libraries

NamePackageChangelogDescription
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
LogTape Browser Server Deno BunnpmChangelogModern, structured logging library for TypeScript and 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 Server Deno BunnpmChangelogPowerful, 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
Amazon CloudWatch Logs ServernpmChangelogLogging for Amazon CloudWatch Logs
AWS Lambda Powertools Logger ServernpmChangelogLogging for AWS Lambdas
Axiom ServernpmChangelogSend logs to Axiom cloud logging platform
Better Stack Server Deno BunnpmChangelogSend logs to Better Stack log management 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
Sentry Browser Server Deno BunnpmChangelogSend structured logs to Sentry using the Sentry SDK logger API
Logflare Server Deno BunnpmChangelogSend logs to Logflare log ingestion and querying engine
Sumo Logic ServernpmChangelogSend logs to Sumo Logic via HTTP Source
VictoriaLogs Server Deno BunnpmChangelogSend logs to VictoriaLogs by Victoria Metrics using JSON stream API

Other Transports

NamePackageChangelogDescription
HTTP Browser Server Deno BunnpmChangelogGeneric 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 Server Deno BunnpmChangelogPretty 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

Available Mixins

NamePackageDescription
Hot-Shots (StatsD) ServernpmAdds the hot-shots API to LogLayer

LogLayer is made with ❤️ by Theo Gravity.