0Pricing
Java Academy · 강의

Logback 구성

어펜더, 패턴, 수준을 설정합니다

Logback 구성은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

Logback이란 무엇인가요

Logback은 널리 사용되는 SLF4J 백엔드이며 Log4j와 같은 작성자가 만들었습니다. SLF4J가 설명하는 로그 기록을 실제로 수행합니다.

일반적으로 src/main/resources 아래에 두는 logback.xml 파일을 클래스 경로에 배치하여 설정합니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("Logback reads logback.xml at startup");
    }
}

세 가지 구성 요소

Logback 설정에는 세 가지 핵심 개념이 있습니다.

  • 로거: 로그 이벤트의 이름이 지정된 출처이며 수준을 가집니다.
  • 어펜더: 로그를 보내는 대상(콘솔, 파일)입니다.
  • 인코더/레이아웃: 이벤트를 텍스트로 형식 지정합니다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("logger -> appender -> encoder -> output");
    }
}

콘솔 어펜더

가장 간단한 설정은 모든 내용을 콘솔로 보냅니다. 인코더의 패턴이 줄 형식을 결정합니다.

이 XML은 Java 코드가 아니라 logback.xml에 작성합니다.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

패턴 이해하기

패턴 변환 단어는 %로 시작합니다.

  • %d는 타임스탬프, %level은 수준입니다.
  • %logger는 로거 이름, %thread는 스레드입니다.
  • %msg는 메시지, %n은 줄 바꿈입니다.

%-5level은 수준을 너비 5에 맞춰 왼쪽을 채웁니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        // Output rendered by pattern: time LEVEL logger - message
        log.info("hello");
    }
}

루트 로거와 수준

<root> 요소는 전체 애플리케이션의 기본 수준과 로그를 기록할 어펜더를 설정합니다.

level="info"로 설정하면 INFO, WARN, ERROR가 출력되고 DEBUG와 TRACE는 억제됩니다.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

패키지별 수준

<logger> 요소를 추가하여 패키지의 수준을 재정의하십시오. 이렇게 하면 라이브러리는 조용히 유지하면서 자체 코드에는 DEBUG를 활성화할 수 있습니다.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <logger name="com.example.app" level="debug" />
  <root level="info">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

롤링 파일 어펜더

운영 환경에서는 일반적으로 매일 또는 파일 크기에 따라 교체되는 파일에 기록하므로 로그가 한없이 커지지 않습니다.

RollingFileAppender와 시간 기반 정책을 사용하면 하루에 하나의 파일을 만들고 제한된 기록만 보관할 수 있습니다.

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  <file>logs/app.log</file>
  <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
    <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
    <maxHistory>30</maxHistory>
  </rollingPolicy>
  <encoder>
    <pattern>%d %-5level [%thread] %logger{36} - %msg%n</pattern>
  </encoder>
</appender>

여러 어펜더 동시에 사용하기

루트 로거는 여러 어펜더를 참조할 수 있으므로 로그를 콘솔과 파일에 동시에 보낼 수 있습니다.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %msg%n</pattern></encoder>
  </appender>
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/app.log</file>
    <encoder><pattern>%d %-5level %msg%n</pattern></encoder>
  </appender>
  <root level="info">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

MDC 출력하기

요청 ID와 같은 MDC 컨텍스트를 모든 줄에 포함하려면 패턴에 %X{key}를 추가하십시오.

그러면 MDC에 넣은 모든 값이 자동으로 표시됩니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        MDC.put("requestId", "req-1234");
        // Pattern: %X{requestId} %-5level %msg%n
        log.info("handled");
        MDC.clear();
    }
}

가산성

기본적으로 로거의 이벤트는 상위 로거의 어펜더에도 전달됩니다. 이를 가산성이라고 합니다.

패키지 로거에 자체 어펜더가 있고 중복 출력을 원하지 않는다면 해당 로거에 additivity="false"를 설정하십시오.

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder><pattern>%-5level %logger - %msg%n</pattern></encoder>
  </appender>
  <logger name="com.example.audit" level="info" additivity="false">
    <appender-ref ref="STDOUT" />
  </logger>
  <root level="warn">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

자동 다시 불러오기와 변수

Logback은 <configuration scan="true">를 사용하여 설정을 주기적으로 다시 불러올 수 있으므로 재시작 없이 수준을 변경할 때 유용합니다.

${LOG_DIR} 자리 표시자를 사용하면 로그 디렉터리와 같은 속성도 읽을 수 있습니다.

<configuration scan="true" scanPeriod="30 seconds">
  <property name="LOG_DIR" value="logs" />
  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${LOG_DIR}/app.log</file>
    <encoder><pattern>%d %-5level %msg%n</pattern></encoder>
  </appender>
  <root level="info"><appender-ref ref="FILE" /></root>
</configuration>

빠른 확인

Logback 설정에 대한 지식을 확인해 보십시오.

복습

Logback을 설정하는 방법을 배웠습니다.

  • 설정은 로거, 어펜더, 인코더가 포함된 logback.xml에 작성합니다.
  • 패턴은 %d, %level, %msg, %X{}로 줄의 형식을 지정합니다.
  • RollingFileAppender는 로그 파일을 교체하며, 패키지별 수준과 가산성을 설정할 수 있습니다.
  • 실행 중 설정을 다시 적용하려면 scan을 활성화합니다.

로그 기록 과정을 모두 마쳤습니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Main {
    private static final Logger log = LoggerFactory.getLogger(Main.class);
    public static void main(String[] args) {
        log.info("Logback configuration course complete");
    }
}

자주 묻는 질문

“Logback 구성” 강의는 무료인가요?

네 — “Logback 구성” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Logback 구성”에서 뭘 배우나요?

어펜더, 패턴, 수준을 설정합니다 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.

“Logback 구성” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 구조화된 로깅이 필요한 이유
  2. SLF4J 퍼사드와 로거
  3. 매개변수화된 로깅
  4. Logback 구성
← Java Academy(으)로 돌아가기