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