MinLog (Java Logging Library)
MinLog는 Nathan Sweet(EsotericSoftware)가 개발한 경량 Java 로깅 라이브러리다. Kryo, KryoNet, libGDX 같은 오픈소스 프로젝트에서 오버헤드를 줄이기 위해 주로 쓰인다.
핵심 특징
-
초경량 구조 전체 라이브러리가
com.esotericsoftware.minlog.Log라는 단일 클래스(실제 코드 약 100줄 내외)로 구성되어 있다. 외부 의존성이 전혀 없다. -
제로 오버헤드 (컴파일 타임 최적화) 로그 레벨 필드가
static final boolean으로 선언될 수 있도록 설계되어 있다. 예를 들어if (Log.DEBUG) Log.debug("...");형태로 작성하고 배포 빌드에서DEBUG를 비활성화하면, Java 컴파일러(javac)나 ProGuard가 해당 조건문과 내부의 문자열 결합 코드를 바이트코드에서 아예 제거(Dead Code Elimination)한다. -
단순한 API 복잡한 설정 파일(XML, JSON, properties)이나 로거 인스턴스 생성 과정이 없다. 정적(static) 메서드를 바로 호출해서 쓴다.
-
지원 로그 레벨
LEVEL_NONE(로깅 비활성화)LEVEL_ERRORLEVEL_WARNLEVEL_INFOLEVEL_DEBUGLEVEL_TRACE
-
커스터마이징 기본적으로 콘솔(
System.out)에 경과 시간, 로그 레벨, 카테고리, 메시지를 출력한다. 출력 방식이나 포맷을 바꾸고 싶다면Log.Logger클래스를 상속받아log()메서드를 오버라이드한 뒤Log.setLogger()로 등록하면 된다.
기본 사용법
import com.esotericsoftware.minlog.Log;
public class Main {
public static void main(String[] args) {
// 로그 레벨 설정
Log.set(Log.LEVEL_DEBUG);
// 일반 로그 출력
Log.info("서버 시작됨");
// 카테고리 지정 로그 출력
Log.debug("network", "연결 시도 중...");
// 예외 포함 로그 출력
try {
throw new RuntimeException("테스트 예외");
} catch (Exception e) {
Log.error("database", "쿼리 실패", e);
}
// 문자열 연산 오버헤드 방지 패턴
if (Log.TRACE) {
Log.trace("system", "상세 데이터: " + System.currentTimeMillis());
}
}
}주요 Java 로깅 라이브러리와의 비교
| 비교 항목 | MinLog | SLF4J + Logback | java.util.logging (JUL) |
|---|---|---|---|
| 개발 주체 | EsotericSoftware (Nathan Sweet) | QOS.ch (Ceki Gülcü) | Oracle / OpenJDK |
| 라이브러리 크기 | 극소형 (단일 클래스, 수 KB) | 중대형 (수백 KB 이상, 다중 JAR) | 내장 (JDK 기본 포함) |
| 설정 방식 | Java 코드 내에서 직접 호출 (Log.set()) | XML, Groovy, Properties 등 외부 파일 | Properties 파일 또는 코드 |
| 런타임 오버헤드 | 거의 없음 (컴파일러 최적화 가능) | 낮음 (동적 바인딩 및 Appender 처리 존재) | 보통 |
| 주요 기능 | 콘솔 출력, 기본 레벨 필터링 | 파일 롤링, 비동기 로깅, MDC, 다양한 Appender | 기본 파일/콘솔 핸들러, 포매터 |
| 주 사용처 | 게임 개발(libGDX), 직렬화(Kryo), 안드로이드/임베디드 | 엔터프라이즈 서버, 대규모 웹 애플리케이션 | 외부 의존성을 추가할 수 없는 기본 Java 환경 |
출처 (Sources)
- EsotericSoftware, MinLog GitHub Repository (README & Source Code): https://github.com/EsotericSoftware/minlog
- Baeldung, Introduction to Java Logging: https://www.baeldung.com/java-logging-intro
- QOS.ch, SLF4J User Manual: https://www.slf4j.org/manual.html