theater-client
Version:
TypeScript client library for Theater actor system TCP protocol
62 lines (49 loc) • 1.71 kB
text/typescript
/**
* Simple logging utility for Theater client
*/
export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
export interface Logger {
debug(message: string, ...args: any[]): void;
info(message: string, ...args: any[]): void;
warn(message: string, ...args: any[]): void;
error(message: string, ...args: any[]): void;
}
class ConsoleLogger implements Logger {
constructor(private component: string) {}
private shouldLog(level: LogLevel): boolean {
const levels: LogLevel[] = ['debug', 'info', 'warn', 'error'];
return levels.indexOf(level) >= levels.indexOf(globalLogLevel);
}
private formatMessage(level: LogLevel, message: string): string {
const timestamp = new Date().toISOString();
return `[${timestamp}] [${level.toUpperCase()}] [${this.component}] ${message}`;
}
debug(message: string, ...args: any[]): void {
if (this.shouldLog('debug')) {
console.debug(this.formatMessage('debug', message), ...args);
}
}
info(message: string, ...args: any[]): void {
if (this.shouldLog('info')) {
console.info(this.formatMessage('info', message), ...args);
}
}
warn(message: string, ...args: any[]): void {
if (this.shouldLog('warn')) {
console.warn(this.formatMessage('warn', message), ...args);
}
}
error(message: string, ...args: any[]): void {
if (this.shouldLog('error')) {
console.error(this.formatMessage('error', message), ...args);
}
}
}
// Global logger configuration
let globalLogLevel: LogLevel = 'info';
export function setLogLevel(level: LogLevel): void {
globalLogLevel = level;
}
export function createLogger(component: string): Logger {
return new ConsoleLogger(component);
}