@versionzero/logger
A simple yet powerful logging and tracing utility for Node.js with extensible record transforms and outputs.
Pairs well with
@versionzero/module-manager.
Installation
npm install @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:

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

// 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
This project is licensed under the MIT License -- see the LICENSE file for details.