-
Logback 구현 - 1[공부] 프로그래밍/Spring・Spring Boot (JAVA) 2024. 5. 22. 16:51
♧ 전체 코드 : https://github.com/woodisco/spring-logbackGitHub - woodisco/spring-logback: Spring Logback 공부
Spring Logback 공부. Contribute to woodisco/spring-logback development by creating an account on GitHub.
github.com
Logback 개념
: local 환경SLF4J 라는 인터페이스를 구현하는 구현체이다. 즉 Logging Framework 이다.
◇ Appender의 종류- ConsoleAppender : 콘솔에 log를 출력
- FileAppender : 파일 단위로 log를 저장
- RollingFileAppender : 설정 옵션에 따라 log를 여러 파일로 나누어 저장
- SMTPAppender : log를 메일로 전송하여 기록
- DBAppender : log를 DB에 저장
Logback 구현
① logback-spring.xml 작성
: spring에서 사용할 logback을 설정하기 위해 파일을 작성 후, 서버를 작동시키면 아래와 같이 아무것도 뜨지 않게 된다.그렇게 때문에 아래의 코드를 추가하고
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
프로파일에 따라 logback 설정을 따로 처리하기 위해 아래의 코드도 추가해준다.
<include resource="logback-spring-${spring.profiles.active}.xml"/>
② logback-spring-local.xml 작성
: logback-spring.xml 에 include 되기 때문에 해당 파일에는 included라고 표기해야 한다. 그리고 ConsoleAppender를 include 한다.<include resource="org/springframework/boot/logging/logback/console-appender.xml" />
+ 기본적인 로그레벨 설정을 추가해야 한다.
<root level="DEBUG"> <appender-ref ref="CONSOLE" /> </root>
+ appender도 추가해야 한다.
<appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender"> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <layout> <pattern> [CONSOLE2] [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n </pattern> </layout> </appender>
+ root태그에 추가한 appender을 설정하기.
<appender-ref ref="CONSOLE2" />
root를 DEBUG로 설정을 하여도 appender마다 다른 레벨로 설정을 할 수있다.
깔끔한 출력을 위해 root태그의 CONSOLE을 주석처리 한 후에 서버를 가동해 설정한 패턴대로 로그가 출력되는지 확인하기.※ local 환경이므로 Active profiles을 설정하기
참조 : https://woodisco.tistory.com/188③ DemoController 작성
package dev.be.springlogback.controller; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @Slf4j @RestController public class DemoController { @GetMapping("/demo") public String demo() { log.trace("log --> TRACE"); log.debug("log --> DEBUG"); log.info("log --> INFO"); log.warn("log --> WARN"); log.error("log --> ERROR"); return "Hello"; } }
해당 controller를 작성하여 설정한 로그가 제대로 출력되는지 확인하기.
로그 레벨은 debug -> info -> warn -> error 순으로 CONSOLE2 appender의 로그 레벨이 INFO이므로 아래와 같이 출력된다.
Logback 개념
: production 환경① logback-spring-prod 작성
: 운영환경의 경우에는 ConsoleAppender가 필요 없기 때문에 RollingFileAppender로 설정을 해준다.<included> <!-- logback-variables.properties에 정의되어 있는 Key를 사용하기 위한 코드 --> <property resource="logback-variables.properties" /> <appender name="REQUEST1" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/request1.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/archive/request1.%d{yyyy-MM-dd}_%i.log</fileNamePattern> <!-- <maxFileSize>10MB</maxFileSize> --> <maxFileSize>1KB</maxFileSize> <!-- 로그파일의 최대 크기 --> <maxHistory>30</maxHistory> <!-- 로그파일 최대 보관주기(단위 : 일) / 보관주기가 넘어가면 파일은 자동으로 삭제 --> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <pattern>[REQUEST1] ${LOG_PATTERN}</pattern> <!-- ## outputPatternAsHeader - File 헤더에 pattern을 출력한다. - ref : https://logback.qos.ch/manual/encoders.html#outputPatternAsHeader ex) #logback.classic pattern: [%-5level] %d{yyyy-MM-dd HH:mm:ss} [%thread] [%logger{0}:%line] - %msg%n --> <outputPatternAsHeader>true</outputPatternAsHeader> </encoder> </appender> <root level="INFO"> <appender-ref ref="REQUEST1" /> </root> </included>
서버를 가동시켜 curl localhost:8080/demo 를 터미널로 날리게 되면 아래와 같이 log파일이 생성된것을 볼 수 있다.
+ 두번째 appender를 추가해보기
<appender name="REQUEST2" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${LOG_DIR}/request2.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <fileNamePattern>${LOG_DIR}/archive/request2.%d{yyyy-MM-dd}_%i.log</fileNamePattern> <maxFileSize>1KB</maxFileSize> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>[REQUEST2] ${LOG_PATTERN}</pattern> <outputPatternAsHeader>true</outputPatternAsHeader> </encoder> </appender> // root 태그에 추가 <appender-ref ref="REQUEST2" />
출처 : 패스트캠퍼스 10개 프로젝트로 완성하는 백엔드 웹개발(Java/Spring) 초격차 패키지 Online
'[공부] 프로그래밍 > Spring・Spring Boot (JAVA)' 카테고리의 다른 글
Batch 정리 (0) 2025.04.12 Logback 구현 - 2 (0) 2024.05.23 Feign Client 구현 - 4 (0) 2024.05.22 Feign Client 구현 - 3 (0) 2024.05.22 Feign Client 구현 - 2 (0) 2024.05.21