create-sekiban-app
Version:
Create a new Sekiban application with Dapr
58 lines (46 loc) • 1.56 kB
text/typescript
import { config } from '../config/index.js';
type LogLevel = 'error' | 'warn' | 'info' | 'debug';
class Logger {
private level: LogLevel;
constructor(level: LogLevel = 'info') {
this.level = level;
}
private shouldLog(level: LogLevel): boolean {
const levels: LogLevel[] = ['error', 'warn', 'info', 'debug'];
const currentLevelIndex = levels.indexOf(this.level);
const requestedLevelIndex = levels.indexOf(level);
return requestedLevelIndex <= currentLevelIndex;
}
private formatMessage(level: LogLevel, message: string, ...args: any[]): void {
if (!this.shouldLog(level)) return;
const timestamp = new Date().toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}]`;
switch (level) {
case 'error':
console.error(prefix, message, ...args);
break;
case 'warn':
console.warn(prefix, message, ...args);
break;
case 'info':
console.info(prefix, message, ...args);
break;
case 'debug':
console.debug(prefix, message, ...args);
break;
}
}
error(message: string, ...args: any[]): void {
this.formatMessage('error', message, ...args);
}
warn(message: string, ...args: any[]): void {
this.formatMessage('warn', message, ...args);
}
info(message: string, ...args: any[]): void {
this.formatMessage('info', message, ...args);
}
debug(message: string, ...args: any[]): void {
this.formatMessage('debug', message, ...args);
}
}
export default new Logger(config.LOG_LEVEL);