---
name: system-debug-logger
description: 애플리케이션에 에러 및 예외를 자동으로 캡처하는 디버그 로깅 기능을 추가합니다. 로깅 추가, 디버그 설정, 에러 추적 요청 시 활성화됩니다.
allowed-tools: Read, Write, Edit, Glob, Grep, Bash
---

# System Debug Logger

애플리케이션에 체계적인 디버그 로깅 기능을 추가하는 스킬입니다.

## 기능

### 로깅 레벨
- **ERROR**: 오류 및 예외 상황
- **WARN**: 경고 및 잠재적 문제
- **INFO**: 일반 정보성 메시지
- **DEBUG**: 상세 디버깅 정보
- **TRACE**: 매우 상세한 추적 정보

### 캡처 대상
- 예외 및 에러
- API 요청/응답
- 데이터베이스 쿼리
- 성능 메트릭
- 사용자 액션

### 출력 형식
- 콘솔 출력
- 파일 로깅 (일별 롤링)
- JSON 구조화 로그
- 외부 서비스 전송 (선택)

## 구현 패턴

### JavaScript/Node.js
```javascript
const logger = {
  levels: { ERROR: 0, WARN: 1, INFO: 2, DEBUG: 3, TRACE: 4 },
  currentLevel: 2, // INFO

  log(level, message, meta = {}) {
    if (this.levels[level] <= this.currentLevel) {
      const timestamp = new Date().toISOString();
      const logEntry = {
        timestamp,
        level,
        message,
        ...meta
      };
      console.log(JSON.stringify(logEntry));
    }
  },

  error(message, error = null) {
    this.log('ERROR', message, {
      error: error?.message,
      stack: error?.stack
    });
  },

  warn(message, meta) { this.log('WARN', message, meta); },
  info(message, meta) { this.log('INFO', message, meta); },
  debug(message, meta) { this.log('DEBUG', message, meta); },
  trace(message, meta) { this.log('TRACE', message, meta); }
};

// 전역 에러 핸들러
process.on('uncaughtException', (error) => {
  logger.error('Uncaught Exception', error);
  process.exit(1);
});

process.on('unhandledRejection', (reason) => {
  logger.error('Unhandled Rejection', { reason });
});
```

### Python
```python
import logging
import json
from datetime import datetime

class JSONFormatter(logging.Formatter):
    def format(self, record):
        log_entry = {
            'timestamp': datetime.utcnow().isoformat(),
            'level': record.levelname,
            'message': record.getMessage(),
            'module': record.module,
            'function': record.funcName,
            'line': record.lineno
        }
        if record.exc_info:
            log_entry['exception'] = self.formatException(record.exc_info)
        return json.dumps(log_entry)

# 로거 설정
logger = logging.getLogger(__name__)
handler = logging.StreamHandler()
handler.setFormatter(JSONFormatter())
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)

# 데코레이터로 함수 호출 로깅
def log_calls(func):
    def wrapper(*args, **kwargs):
        logger.debug(f'Calling {func.__name__}',
                    extra={'args': args, 'kwargs': kwargs})
        try:
            result = func(*args, **kwargs)
            logger.debug(f'{func.__name__} returned',
                        extra={'result': result})
            return result
        except Exception as e:
            logger.error(f'{func.__name__} failed', exc_info=True)
            raise
    return wrapper
```

### Express 미들웨어
```javascript
const requestLogger = (req, res, next) => {
  const start = Date.now();

  res.on('finish', () => {
    const duration = Date.now() - start;
    logger.info('HTTP Request', {
      method: req.method,
      url: req.url,
      status: res.statusCode,
      duration: `${duration}ms`,
      userAgent: req.get('User-Agent'),
      ip: req.ip
    });
  });

  next();
};

const errorLogger = (err, req, res, next) => {
  logger.error('Request Error', {
    method: req.method,
    url: req.url,
    error: err.message,
    stack: err.stack
  });
  next(err);
};
```

## 로그 파일 구조

```
logs/
├── app-2024-01-15.log      # 일별 로그
├── error-2024-01-15.log    # 에러 전용
└── debug/
    └── trace-2024-01-15.log # 상세 추적
```

## 사용 예시

```
이 프로젝트에 디버그 로깅을 추가해줘
API 요청을 로깅하는 미들웨어를 만들어줘
에러 추적 시스템을 설정해줘
```

## 출처
Original skill from skills.cokac.com
