프론트 - 백 협업 시 서버의 에러 로그를 프론트가 볼 수 없다는 불편함이 있습니다.
배포 환경에서 백엔드 개발자도 로그를 보려면 터미널에 접속하거나, aws에 접속해야 하는 불편함이 있습니다.
이러한 불편함을 덜고자 Slack에 에러 로그 보내는 기능을 추가해보겠습니다.
목표
- log.error()에 해당하는 메세지들을 Slack 채널에 띄운다.
준비물
- 배포 환경설정을 마친 서버
- GlobalExceptionHandler (없어도 가능하긴 합니다 log.error() 메세지들을 추적합니다. )
1. 슬랙에 앱 (WebHook) 추가하기
- 슬랙에 아무 채널이나 파고, 채널에 우클릭 -> 채널 세부정보 보기 클릭
- '통합' 탭 -> '앱'의 '앱 추가' 버튼 클릭
- Incoming WebHooks 검색 후 '설치' 버튼 클릭
- 해당 페이지에서 'Slack에 추가' 버튼 클릭
- 채널에 포스트 -> 아까 생성한 채널 클릭 후 '수신 웹후크 통합 앱 추가' 버튼 클릭
- 이후 뜨는 페이지에서 '웹후크 URL' 을 복사해둔다.
- 하단에 이름과 아이콘을 사용자 지정 가능하다.
2. applicaiton.yaml 에 설정 추가
logging:
slack:
webhook-uri: https://hooks.slack.com/services/머시기저시기
config: classpath:logback-spring.xml
- 머시기 저시기가 들어가 있는 저 uri가 아까 복사해둔 '웹후크 URL'이다.
- classpath는 3번에서 만들 logback-spring.xml의 위치이다.
3. logback-spring.xml 생성
- resources에서 application.yaml과 같은 위치에 둘 것
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<springProperty name="SLACK_WEBHOOK_URI" source="logging.slack.webhook-uri"/>
<appender name="SLACK" class="com.github.maricn.logback.SlackAppender">
<webhookUri>${SLACK_WEBHOOK_URI}</webhookUri>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %msg %n</pattern>
</layout>
<colorCoding>true</colorCoding>
</appender>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d %-5level %logger{35} - %msg%n</Pattern>
</encoder>
</appender>
<appender name="ASYNC_SLACK" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="SLACK"/>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
</appender>
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="ASYNC_SLACK"/>
</root>
</configuration>
- 웹후크가 메세지를 전송할 때 어떻게 보낼지를 정의한다.
- application.yaml 에서 환경변수를 가져온다.
- 수정할게 없다. 그대로 갖다 붙이시면 된다.
끝이야..?
끝이다.
슬랙이 애초에 협업 도구인데, 이거 알림 켜두면 다른 사람들이 굉장히 불편해 할 것이므로.. 웬만해선 음소거 설정해두는걸 권장한다.
안돼요
- 혹시 본인의 로직에서 log.error()를 던지지 않는지 확인
- yaml에 입력한 url이 제대로 적용되는지 확인
- 배포 환경에선 보통 yaml파일을 깃헙 시크릿에 입력하거나, 직접 넣으므로 반영했는지 확인
'Spring Boot' 카테고리의 다른 글
[Spring Boot] 로컬에서 application.yaml 에 .env 환경변수 주입하기 (1) | 2023.10.11 |
---|---|
[스프링부트] 스마트 택배 API ( sweet-tracker ) 기능 구현하기 (0) | 2023.07.16 |
[스프링 부트] 효율적 주문 관리 시스템 (0) | 2023.07.14 |
[스프링 부트] '주문번호' 서비스 구현하기 (Jpa사용) (1) | 2023.07.13 |