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()};