상세 컨텐츠

본문 제목

로컬PC에서 logback.xml 파일 직접 생성해서 설정해보기

IT

by JR 2025. 11. 6. 15:53

본문

300x250
반응형

 


🧩 전체 구조 개요

<configuration>
    <!-- 1. 전역 변수 -->
    <property ... />

    <!-- 2. 로그 출력 대상 (Appender) -->
    <appender ... />
    <appender ... />

    <!-- 3. 로그 필터 및 로거 설정 -->
    <root level="INFO">
        <appender-ref ... />
    </root>
</configuration>

즉, logback.xml은 **“로깅 파이프라인”**을 설정하는 파일이에요.

[코드 → SLF4J Logger → Logback → Appender(Console/File 등)]
이렇게 흘러가는 과정을 정의합니다.


🧱 1️⃣ <property> — 전역 변수 선언

<property name="LOG_PATH" value="./logs" />
<property name="LOG_FILE" value="${LOG_PATH}/app.log" />

역할:

  • 경로나 문자열 값을 전역 변수처럼 정의할 수 있음
  • ${LOG_PATH} 처럼 다른 설정에서 재사용 가능

💡 예를 들어,
./logs/app.log → "현재 프로젝트 폴더(logs)" 안에 로그 파일 생성
다른 경로로 바꾸려면 한 곳만 수정하면 됨 (유지보수 편리)


🖥️ 2️⃣ <appender> — 로그 출력 대상 정의

Logback에서는 로그를 “어디에 쓸지”를 Appender로 정의합니다.
보통 콘솔(ConsoleAppender)과 파일(RollingFileAppender) 2개를 함께 사용합니다.


▶ (1) 콘솔 Appender

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

설명:

  • ConsoleAppender: IDE 콘솔 창이나 터미널에 출력
  • encoder: 로그 메시지 형식 지정
  • pattern: 출력 포맷
  • %d → 날짜/시간 [%thread] → 실행 스레드 이름 %-5level → 로그 레벨(INFO, DEBUG 등) %logger{36} → 클래스 이름(최대 36글자) %msg → 실제 로그 메시지 %n → 줄바꿈

예시 출력:

2025-11-03 13:50:21.123 [main] INFO  org.example.MyServer - 서버 시작

▶ (2) 파일 Appender

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_FILE}</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

설명:

  • RollingFileAppender: 로그를 파일로 저장 + 일정 기준으로 자동 분할(롤링)
  • <file>: 현재 활성 로그 파일 (예: logs/app.log)
  • <rollingPolicy>: 로그 파일 교체 규칙
    • fileNamePattern: 날짜별 로그파일 생성 (예: app.2025-11-03.log)
    • maxHistory: 보관 일수 (7일치만 유지)
  • <encoder>: 콘솔과 동일한 출력 포맷

동작 예시:

logs/
 ├─ app.log  (오늘 로그)
 ├─ app.2025-11-02.log
 ├─ app.2025-11-01.log

🔁 3️⃣ <root> — 로그 레벨 및 Appender 연결

<root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="FILE" />
</root>

설명:

  • 모든 패키지/클래스의 기본 로그 레벨 지정
  • 이 설정은 전역(Default Logger) 입니다.
  • INFO 이상 레벨만 출력 (DEBUG 이하 무시)
  • <appender-ref>로 위에서 정의한 콘솔·파일을 연결

레벨 계층 구조 (낮을수록 상세 로그):

TRACE → DEBUG → INFO → WARN → ERROR

예시:

  • root level="INFO" → DEBUG 로그는 출력 안 됨
  • 개발 환경에서는 DEBUG, 운영 환경에서는 INFO나 WARN으로 맞춤

🧠 4️⃣ 동작 원리 요약

LoggerFactory.getLogger(MyClass.class)
     ↓
Logback이 로드됨 (logback.xml 파싱)
     ↓
Logger 객체 생성
     ↓
logger.info("서버 시작") 호출
     ↓
<root>에서 지정한 Appender 두 곳으로 출력
     ↓
Console: 터미널에 로그 출력
File: logs/app.log 파일에 기록

⚙️ 5️⃣ 자주 사용하는 확장 설정 (참고)

기능 설정 예시

로그 레벨별 색상 출력 <withJansi>true</withJansi> 추가
특정 패키지만 별도 레벨 지정 <logger name="org.example.dao" level="DEBUG" />
로그 파일 최대 크기 기준 롤링 <SizeBasedTriggeringPolicy maxFileSize="10MB" />
AsyncAppender (비동기 로그) <appender class="ch.qos.logback.classic.AsyncAppender">

🧾 정리

구분 역할 예시
<property> 경로·파일명 변수 선언 ${LOG_PATH}
<appender> 로그 출력 위치 정의 Console, File 등
<encoder> 로그 메시지 형식 %d [%thread] %level %msg
<rollingPolicy> 로그 파일 교체 규칙 일자별 롤링, 보관일수
<root> 전체 로그 최소 레벨 + Appender 연결 INFO, 콘솔+파일 출력

 

✅ 1️⃣ 결론 요약

  • pom.xml → Maven이 자동 생성해주는 프로젝트 설정 파일
    (Maven 프로젝트 만들면 기본 템플릿이 생김)
  • logback.xml → 로깅 설정 파일 (수동 생성 필요)
    (Maven은 logback을 “빌드 도구”로 인식하지 않기 때문에 자동 생성 안 함)

✅ 2️⃣ 직접 생성하는 방법 (IntelliJ 기준)

  1. Project 창에서 다음 경로로 이동:
  2. src/main/
  3. main 폴더에서 오른쪽 클릭 → New → Directory 선택
    이름을 resources 로 지정
    (이미 있으면 건너뛰기)
  4. 그 안에서 New → File → logback.xml 생성
  5. 아래 코드 붙여넣기 👇
<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOG_PATH" value="./logs" />
    <property name="LOG_FILE" value="${LOG_PATH}/app.log" />

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>7</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

✅ 3️⃣ 만들어두면 이렇게 동작해요

  • Logback이 실행 시 classpath(즉, src/main/resources) 안에서
    logback.xml 파일을 자동 검색합니다.
  • 발견하면 그 설정을 사용해서 로그를 콘솔/파일에 출력합니다.
  • 못 찾으면 기본 콘솔 로그 형식으로만 출력됩니다.

✅ 4️⃣ 참고로...

만약 Gradle 프로젝트였다면
→ src/main/resources/logback.xml 위치는 동일하고,
→ 다만 설정 파일 생성도 직접 수동으로 만들어야 합니다.


300x250
반응형

관련글 더보기