enum LogLevel { DEBUG = 'debug', INFO = 'info', WARN = 'warn', ERROR = 'error',}type Message = stringclass Logger { private level: LogLevel constructor(level: LogLevel = LogLevel.DEBUG) { this.level = level } private log(level: LogLevel, message: Message) { if (this.level === LogLevel.DEBUG || level !== LogLevel.DEBUG) { const label = level.toUpperCase() console.log(`[${label}] ${message}`) } } /** * - 개발 혹은 테스트 단계 * - 운영 환경에서는 남기고 싶지 않은 로그 메세지 */ public debug(message: Message) { this.log(LogLevel.DEBUG, message) } /** * - 정상 작동에 대한 정보 * - 시스템을 파악하는데 유익한 정보 */ public info(message: Message) { this.log(LogLevel.INFO, message) } /** * - 잠재적으로 문제가 될 수 있는 상황 * - 언제든 발생할 수 있는 일반적인 문제 상황 * - 사용자에게 노출되는 메세지에 상세한 가이드가 필요 */ public warn(message: Message) { this.log(LogLevel.WARN, message) } /** * - 심각한 오류나 예외 상황 * - 즉시 조치가 필요할때 */ public error(message: Message) { this.log(LogLevel.ERROR, message) }}