Skip to main content

Logger

@versionzero/logger
https://github.com/argh/logger

A simple yet powerful logging and tracing utility for Node.js with extensible record transforms and outputs.

Installation

npm install --save @versionzero/logger

Basic Usage

// ESM import
import { Logger } from '@versionzero/logger';

// Create a logger instance
const logger = new Logger('demo', {level: 'debug'});

// Log messages at different severity levels
logger.debug('Welcome! have some detailed debug information');
logger.info('Hello, world!');
logger.notice('kind of a big deal')
logger.warn('warning message');
logger.error('Failed to do a thing', new Error('Connection to reality lost'));
logger.fatal(new Error('System has gone completely sideways'), {'guru-meditation': '0xDEADBEEF'});

// Log with data
logger.info({ user: 'john', action: 'login' }, 'User logged in');

// Create a child logger that provides additional context to log with all records
const serviceLogger = logger.child('user-service', {context: {userServiceVersion: '1.2.1'}});
serviceLogger.debug({ user: 'bob', email: 'bob@example.com' }, 'service invoked');

The default "human-friendly" output mode will display something like this:

logger console output snapshot

whereas in json output mode, it can be sent for analysis by downstream observability tools:

logger console output snapshot


// You can create a child tracer logger that logs telemetry and transparently propagates trace context:
const txnLogger = serviceLogger.tracer('get-user');
const user = await txnLogger.run(async () => getUser());
txnLogger.info('got user', {user})
// Shorthand version
const user = await serviceLogger.trace('get-user', async () => getUser());

// You can also automatically instrument class methods with tracers to avoid having to wrap calls:
logger.instrument(userService);
const user = await userService.getUser();

Features

  • Severity levels and filtering based on syslog standards
  • Hierarchical loggers with context inheritance
  • Extensible set of output handlers; default set supports console output (either pretty or json) and syslog (udp or tcp)
  • Extensible log record transform pipeline (can add processing for your own custom types)
  • Tracing with W3C/OpenTelemetry-compatible trace/span logging

Requirements

  • ESM Modules
  • Node 20.9.0+

License

Copyright 2026 Version Zero | github.com/argh

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this library except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.