LoggerFactory.ts

Complete logging system with ILogger interface, ConsoleLogger implementation, and LoggerFactory for micro-block architecture - no external dependencies

LoggerFactory.tsv1.0.02.9 KB
LoggerFactory.ts(typescript)
1/**
2 * Base logger interface for all logging operations
3 */
4export interface ILogger {
5  info(message: string, meta?: Record<string, any>): void;
6  error(message: string, error?: Error, meta?: Record<string, any>): void;
7  warn(message: string, meta?: Record<string, any>): void;
8  debug(message: string, meta?: Record<string, any>): void;
9}
10
11/**
12 * Extended logger interface specifically for command execution tracking
13 */
14export interface ICommandLogger extends ILogger {
15  commandStart(commandName: string, input?: any): (() => void) | undefined;
16  commandSuccess(commandName: string, output?: any): void;
17  commandFailure(commandName: string, error: Error): void;
18}
19
20/**
21 * Factory interface for creating logger instances
22 */
23export interface ILoggerFactory {
24  getLogger(serviceName: string): ILogger;
25}
26
27/**
28 * Console-based logger implementation for development and simple deployments
29 */
30export class ConsoleLogger implements ICommandLogger {
31  constructor(private prefix: string = '') {}
32
33  private formatMessage(level: string, message: string, meta?: Record<string, any>): string {
34    const timestamp = new Date().toISOString();
35    const prefixStr = this.prefix ? `[${this.prefix}]` : '';
36    const metaStr = meta ? ` ${JSON.stringify(meta)}` : '';
37    return `[${timestamp}] ${prefixStr} ${level.toUpperCase()}: ${message}${metaStr}`;
38  }
39
40  info(message: string, meta?: Record<string, any>): void {
41    console.log(this.formatMessage('info', message, meta));
42  }
43
44  error(message: string, error?: Error, meta?: Record<string, any>): void {
45    const errorMeta = error ? { ...meta, error: error.message, stack: error.stack } : meta;
46    console.error(this.formatMessage('error', message, errorMeta));
47  }
48
49  warn(message: string, meta?: Record<string, any>): void {
50    console.warn(this.formatMessage('warn', message, meta));
51  }
52
53  debug(message: string, meta?: Record<string, any>): void {
54    if (process.env.NODE_ENV === 'development') {
55      console.debug(this.formatMessage('debug', message, meta));
56    }
57  }
58
59  commandStart(commandName: string, input?: any): (() => void) | undefined {
60    const startTime = Date.now();
61    this.info(`Command started: ${commandName}`, { input });
62    
63    return () => {
64      const duration = Date.now() - startTime;
65      this.info(`Command completed: ${commandName}`, { duration: `${duration}ms` });
66    };
67  }
68
69  commandSuccess(commandName: string, output?: any): void {
70    this.info(`Command succeeded: ${commandName}`, { output });
71  }
72
73  commandFailure(commandName: string, error: Error): void {
74    this.error(`Command failed: ${commandName}`, error);
75  }
76}
77
78/**
79 * Factory for creating logger instances
80 */
81export class LoggerFactory implements ILoggerFactory {
82  constructor() {}
83
84  getLogger(serviceName: string): ILogger {
85    // Creates console logger instances
86    // Can be extended to support different logger types based on configuration
87    return new ConsoleLogger(serviceName);
88  }
89}

Metadata

Path
utaba/main/services/micro-block/LoggerFactory.ts
Namespace
utaba/main/services/micro-block
Author
utaba
Category
services
Technology
typescript
Contract Version
1.0.0
MIME Type
application/typescript
Published
18-Jul-2025
Last Updated
18-Jul-2025