Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | 2x 2x 2x 5x 3x 8x 5x 3x 3x 3x 3x 3x 3x 3x 8x 8x 2x | /**
* 로깅 유틸리티
* 워커 풀 시스템에서 사용되는 로깅 유틸리티
*/
import { LogLevel } from "../types/index.js";
/**
* 로거 설정 인터페이스
*/
export interface LoggerConfig {
/** 로깅 활성화 여부 */
enabled: boolean;
/** 로그 레벨 */
level: LogLevel;
/** 콘솔 출력 여부 */
console: boolean;
/** 사용자 정의 로그 핸들러 */
customHandler?: (level: LogLevel, message: string, ...args: any[]) => void;
}
/**
* 기본 로거 설정
*/
const defaultConfig: LoggerConfig = {
enabled: true,
level: LogLevel.INFO,
console: true,
};
/**
* 로거 클래스
*/
class Logger {
/** 로거 설정 */
private config: LoggerConfig;
/**
* 로거 생성자
* @param config 로거 설정
*/
constructor(config: Partial<LoggerConfig> = {}) {
this.config = {
...defaultConfig,
...config,
};
}
/**
* 로거 설정 업데이트
* @param config 로거 설정
*/
configure(config: Partial<LoggerConfig>): void {
this.config = {
...this.config,
...config,
};
}
/**
* 디버그 레벨 로그
* @param message 메시지
* @param args 추가 인자
*/
debug(message: string, ...args: any[]): void {
this.log(LogLevel.DEBUG, message, ...args);
}
/**
* 정보 레벨 로그
* @param message 메시지
* @param args 추가 인자
*/
info(message: string, ...args: any[]): void {
this.log(LogLevel.INFO, message, ...args);
}
/**
* 경고 레벨 로그
* @param message 메시지
* @param args 추가 인자
*/
warn(message: string, ...args: any[]): void {
this.log(LogLevel.WARN, message, ...args);
}
/**
* 오류 레벨 로그
* @param message 메시지
* @param args 추가 인자
*/
error(message: string, ...args: any[]): void {
this.log(LogLevel.ERROR, message, ...args);
}
/**
* 로그 출력
* @param level 로그 레벨
* @param message 메시지
* @param args 추가 인자
*/
private log(level: LogLevel, message: string, ...args: any[]): void {
// 로깅이 비활성화되었거나 설정된 레벨보다 낮은 레벨이면 무시
if (!this.config.enabled || !this.shouldLog(level)) {
return;
}
// 타임스탬프 추가
const timestamp = new Date().toISOString();
const formattedMessage = `[${timestamp}] [${level}] ${message}`;
// 사용자 정의 핸들러가 있으면 호출
Iif (this.config.customHandler) {
this.config.customHandler(level, formattedMessage, ...args);
}
// 콘솔 출력이 활성화되어 있으면 콘솔에 출력
if (this.config.console) {
switch (level) {
case LogLevel.DEBUG:
console.debug(formattedMessage, ...args);
break;
case LogLevel.INFO:
console.info(formattedMessage, ...args);
break;
case LogLevel.WARN:
console.warn(formattedMessage, ...args);
break;
case LogLevel.ERROR:
console.error(formattedMessage, ...args);
break;
}
}
}
/**
* 로그 레벨이 출력 가능한지 확인
* @param level 로그 레벨
* @returns 출력 가능 여부
*/
private shouldLog(level: LogLevel): boolean {
const levels = {
[LogLevel.DEBUG]: 0,
[LogLevel.INFO]: 1,
[LogLevel.WARN]: 2,
[LogLevel.ERROR]: 3,
};
return levels[level] >= levels[this.config.level];
}
}
/**
* 로거 인스턴스
*/
export const logger = new Logger();
|