Skip to main content

Additional Examples

Hierarchical Logging

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

// Root logger
const rootLogger = new Logger({ name: 'app' });

// Database module logger
const dbLogger = rootLogger.child('db', { context: { component: 'database' } });

// Auth module logger
const authLogger = rootLogger.child('auth', { context: { component: 'authentication' } });

// Usage
rootLogger.info('Application started'); // [app] Application started
dbLogger.info('Connected to database'); // [app/db] Connected to database
authLogger.warn('Login failed'); // [app/auth] Login failed

HTTP Request Logging

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

const logger = new Logger();

// Express middleware
app.use((req, res, next) => {
const startTime = Date.now();

// Log when request completes
res.on('finish', () => {
const duration = Date.now() - startTime;
logger.info({ req, res, duration }, 'Request completed');
});

next();
});

HTTP Tracing

A helper function is provided to propagate trace contexts sent in request headers (W3C, OpenTelemetry, Zipkin and Jaeger).

import { Logger, TraceContext } from '@versionzero/logger';

const logger = new Logger();

// Express middleware
app.use((req, res, next) => {
const traceContext = TraceContext.fromTraceHeaders(`server-request`, req.headers);
req.ctx.tracer = this.logger.tracer(traceContext);
req.ctx.tracer.run(`${req.method} ${req.route.path}`, next) // downstream tracers will inherit this context
})

Similarly, a helper is provided to format the trace context for downstream use:

 const headers = {...options.headers, ...tracer.traceContext?.toW3CHeaders()};