Back to blog
Backend1 min read2023년 7월 20일

[스프링부트] 배포환경에서 에러로그 Slack에 보내기

배포 환경에서 서버에 접속하지 않고도 에러 로그를 보려고, logback으로 log.error()를 Slack에 흘려보냈습니다.

프론트 - 백 협업 시 서버의 에러 로그를 프론트가 볼 수 없다는 불편함이 있습니다.

배포 환경에서 백엔드 개발자도 로그를 보려면 터미널에 접속하거나, 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파일을 깃헙 시크릿에 입력하거나, 직접 넣으므로 반영했는지 확인

Topics

spring-bootslacklogging