HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
🧚
[1기]최종 프로젝트 데브코스
/
[팀12] 기부니🧡
[팀12] 기부니🧡
/
🏷️
기술 정리 & 이슈 관리
/
‼️
Spring Boot 로깅 설정
‼️

Spring Boot 로깅 설정

태그
참고 블로그

[Springboot] 슬랙으로 로그 남기기(Logback)
SLF4J(Simple Logging Facade for Java)의 구현체 중 하나이다. 스프링 부트에서는 spring-boot-starter 패키지 안에 로그 라이브러리를 기본적으로 가지고 있다. (log4j, logback) 스프링 부트 실행 시 resources 디렉토리 안에 logback-spring.xml 파일이 있으면 참조, 없으면 스프링 부트 기본 설정이 적용된다. 로그 레벨은 TRACE 참조 logback-spring.xml 파일을 생성하면 스프링부트 기본 로그설정 대신 해당 파일 설정을 로드한다.
[Springboot] 슬랙으로 로그 남기기(Logback)
https://velog.io/@haerong22/Spring-%EC%8A%AC%EB%9E%99%EC%97%90-%EB%A1%9C%EA%B7%B8-%EB%82%A8%EA%B8%B0%EA%B8%B0
[Springboot] 슬랙으로 로그 남기기(Logback)
 
📢
개발 환경(dev)에서는 INFO 로그 레벨로 콘솔로 출력하도록, 배포 환경(prod)에서는 ERROR 로그만 따로 볼 수 있도록 별도의 파일로 저장되고 슬랙으로 알림이 오도록 설정하였습니다.
 

1. SLF4J(Simple Logging Facade For Java)

2. 로그 설정


<?xml version="1.0" encoding="UTF-8"?> <configuration> <property name="LOG_DIR" value="./logs"/> <property name="LOG_PATH_NAME" value="${LOG_DIR}/data/"/> <property name="ERROR_LOG_PATH_NAME" value="${LOG_DIR}/error/"/> <property name="LOG_PATTERN_CONSOLE" value="%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %highlight([ %-5level]) | %cyan(%logger{35}) - %msg%n"/> <property name="LOG_PATTERN_FILE" value="[%d{yyyy-MM-dd HH:mm:ss}:%-3relative][%thread] %-5level %logger{35} - %msg%n"/> <property name="MAX_HISTORY" value="7"/> <!-- 콘솔 출력 --> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${LOG_PATTERN_CONSOLE}</pattern> </encoder> </appender> <!-- 파일로 저장--> <appender name="DATA" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${LOG_PATH_NAME}data_%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN_FILE}</pattern> </encoder> </appender> <!-- 에러의 경우는 별도 파일 저장 --> <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"> <filter class="ch.qos.logback.classic.filter.LevelFilter"> <level>ERROR</level> <onMatch>ACCEPT</onMatch> <onMismatch>DENY</onMismatch> </filter> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>${ERROR_LOG_PATH_NAME}error_%d{yyyyMMdd}.log</fileNamePattern> <maxHistory>${MAX_HISTORY}</maxHistory> </rollingPolicy> <encoder> <pattern>${LOG_PATTERN_FILE}</pattern> </encoder> </appender> <!-- profile 에 따라 slack 에 전송 --> <springProfile name="prod"> <property resource="application-dev.yml" /> <appender name="SLACK_ERROR" class="com.github.maricn.logback.SlackAppender"> <webhookUri>${webhook-uri}</webhookUri> <channel>#${channel}</channel> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>${LOG_PATTERN_FILE}</pattern> </layout> <username>${username}</username> <iconEmoji>:${emoji}:</iconEmoji> <colorCoding>true</colorCoding> </appender> <appender name="ASYNC_SLACK_ERROR" class="ch.qos.logback.classic.AsyncAppender"> <appender-ref ref="SLACK_ERROR"/> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>ERROR</level> </filter> </appender> </springProfile> <!-- logger 설정 --> <springProfile name="prod"> <logger name="com.prgrms.needit" level="INFO" additivity="false"> <appender-ref ref="DATA"/> </logger> <logger name="com.prgrms.needit" level="ERROR" additivity="false"> <appender-ref ref="ERROR"/> <appender-ref ref="ASYNC_SLACK_ERROR"/> </logger> </springProfile> <!-- 위의 logger 에 해당하지 않으면(dev 개발 환경) 기본 설정 --> <root level="INFO"> <appender-ref ref="STDOUT"/> </root> </configuration>
 

3. 에러 로그 슬랙으로 남기기

notion image
notion image
 
application-prod.yml 에 슬랙 설정 추가
... webhook-uri: ${WEBHOOK_URI} channel: need-it-error-log username: ERROR LOG emoji: rotating_light ...
notion image