개발 지식

개발 지식

PHP PHP에서 빠르게 로그 시스템 구현하기 (Monolog 활용 X)

페이지 정보

profile_image
영삼이
0건 181회 25-03-28 23:23

본문

✅ PHP에서 빠르게 로그 시스템 구현하기 (Monolog 활용 X)

대부분의 PHP 프로젝트에서 로그는 Monolog을 많이 사용하지만, 작고 단순한 프로젝트라면 라이브러리 없이도 효율적이고 가벼운 로그 시스템을 직접 만들 수 있습니다. 이 글에서는 의존성 없이 PHP 표준 기반의 실용적인 로그 시스템 구현법을 소개합니다.


🧱 기본 로그 클래스

[code=php]
class Logger {
    private string $logDir;
    private string $logFile;

    public function __construct(string $channel = 'app') {
        $this->logDir = __DIR__ . '/logs';
        if (!is_dir($this->logDir)) {
            mkdir($this->logDir, 0777, true);
        }

        $date = date('Y-m-d');
        $this->logFile = "{$this->logDir}/{$channel}-{$date}.log";
    }

    public function log(string $level, string $message, array $context = []): void {
        $time = date('Y-m-d H:i:s');
        $contextStr = $context ? json_encode($context) : '';
        $line = "[{$time}] {$level}: {$message} {$contextStr}" . PHP_EOL;
        file_put_contents($this->logFile, $line, FILE_APPEND);
    }

    public function info(string $message, array $context = []) {
        $this->log('INFO', $message, $context);
    }

    public function error(string $message, array $context = []) {
        $this->log('ERROR', $message, $context);
    }

    public function debug(string $message, array $context = []) {
        $this->log('DEBUG', $message, $context);
    }
}
[/code]

🚀 사용 예시

[code=php]
$logger = new Logger('auth');

$logger->info('로그인 성공', ['user_id' => 123]);
$logger->error('DB 연결 실패');
[/code]

📦 로그 파일 구조 예시

logs/
├── app-2025-03-28.log
├── auth-2025-03-28.log
  • 날짜별, 채널별로 자동 분리

  • JSON 형태로 context 로깅 가능


🧰 로그 레벨 통일 (PSR-3 스타일)

[code=php]
$logger->log('notice', '특정 조건 발생');
$logger->log('warning', '주의할 상황 발생');
[/code]
  • 필요하다면 Psr\Log\LogLevel 참조해 레벨 체계화 가능


🧠 고급 확장 포인트

  • LoggerInterface 생성 → 다형성 주입 구조

  • 파일 외에 DB, Redis, Slack 등으로 로그 전송

  • 로그 회전(로그 롤링) 기능 추가

  • PHP 에러/예외 핸들러와 통합

[code=php]
set_exception_handler(function ($e) use ($logger) {
    $logger->error('예외 발생', ['exception' => $e->getMessage()]);
});
[/code]

✅ 정리

항목 설명
속도 매우 빠름, 오버헤드 없음
설정 PHP 기본 함수만 사용
확장성 채널/날짜별 파일 자동 생성
의존성 전혀 없음 (Monolog 불필요)

🧠 요약

  • 작고 단순한 PHP 프로젝트에서는 직접 만든 Logger 클래스로 충분

  • 채널, 레벨, context 지원만 잘 구성하면 실무 사용에도 문제 없음

  • 대형 프로젝트에서는 PSR-3 호환 라이브러리로 전환 고려


댓글목록

등록된 댓글이 없습니다.