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 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 구조화된 로깅이 필요한 이유
- SLF4J 퍼사드와 로거
- 매개변수화된 로깅
- Logback 구성