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

영삼이
본문
✅ 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 호환 라이브러리로 전환 고려
- 이전글실무에서 PHP 코드 리팩토링 패턴 5가지 25.03.28
- 다음글PHP에서 데코레이터 패턴 실전 적용 팁 25.03.28
댓글목록
등록된 댓글이 없습니다.