Spring Boot

Slack에서 error log 알림받기(console 변동 X)

CodeMania 2022. 3. 11. 01:49

slack에서 프로젝트에 대한 error log 알림을 받기로 했다.
그러면 지금부터 어떻게 하는지 알아보도록 하자!!


1. webhook-uri 생성

1-1. slack app 좌측 메뉴 하단에서 '앱 추가' 버튼 클릭

 

1-2. incoming webhooks를 찾아서 추가

 

1-3. webhook을 추가할 채널 선택

 

1-4. webhook url을 복사한 후 가장 하단에 있는 설정 저장 버튼을 클릭하면 -끝-

이렇게 만든 webhook은 slack 사이트에서 확인가능합니다.
혹시라도 webhook URL을 복사하지 못했다면 아래 메뉴를 따라해주세요!
> 관리(상단 메뉴바) - 사용자 지정 통합 앱(좌측 메뉴바) - incoming webhook - 구성
   - 만들어놓은 webhook 관리 가능

2. java에 설정 적용

2-1. build.gradlelogback-slack-appendar dependency 추가

 

dependencies {
	//...생략
	//log
	implementation 'com.github.maricn:logback-slack-appender:1.6.1'
}
22.03.11 현재 기준 최신 버전은 1.6.1입니다.
version 확인하러 가기

2-2. yml 설정

 

logging:
  slack:
    webhook-uri: 복사한 webhook uri를 넣어주세요!
  config: classpath:logback-slack.xml
logging.config는 설정하지 않아도 되는 option입니다!
설정하지 않는 경우 default인 logback.xml에서 설정을 읽어옵니다!
(굳이 해당 설정을 한 이유는, 해당 설정이 없을 때는
애플리케이션을 시작하면 상단에 logging 옵션과 관련한 log가 발생하여서 설정하였습니다.
신경 안 쓰이시는 분이나, logging 옵션 관련 log가 발생하지 않으시는 분은
그냥 설정하지 않고, logback.xml에서 설정해도 됩니다!)

 

2-3. logback-slack.xml 설정

 

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <springProperty name="SLACK_WEBHOOK_URI" source="logging.slack.webhook-uri"/>
    <appender name="SLACK" class="com.github.maricn.logback.SlackAppender">
        <webhookUri>${SLACK_WEBHOOK_URI}</webhookUri>
        <channel>#refill_attlasian</channel>
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>%-4relative [%thread] %-5level %class - %msg%n</pattern>
        </layout>
        <username>${HOSTNAME}</username>
        <iconEmoji>:stuck_out_tongue_winking_eye:</iconEmoji>
        <colorCoding>true</colorCoding>
    </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 value="INFO" />
        <appender-ref ref="ASYNC_SLACK" />
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

 

기본 틀은 git readme를 참고했다!
layoutpattern 부분을 설정하면 날짜와 시간도 찍을 수 있다.
하지만 slack에 시간이 나와서 나는 안 찍기로 했다.
(물론 실제 오류 발생 후 메시지를 송신하는데 걸리는 시간때문에 차이가 생기지만,
어차피 크게 차이 나지 않으므로 신경쓰지 않기로 했다!
정확하게 시간까지 찍고싶으면 pattern을 적당히 수정하면 된다!! 난 안 하니까 패스한다.)

SLACK_WEBHOOK_URI는 직접 입력해도 된다.
직접 입력하는 경우 application.ymlwebhook 설정도 지워도 된다!

최상단의 include는 spring boot의 기본 logback 파일을 불러오는 설정이다.
spring 공식 document를 참고했다!
이렇게 불러오기를 안 하면 console 관련 log 설정을 직접 해야 한다.

최하단에 보이는 root의 level은 원래(github 참고) ALL로 설정되어있었는데, INFO로 변경하였다!
이외에 궁금한 부분은 직접 찾아보자!

 

logback-slack.xmlresources 폴더 밑에 만들었습니다.

 


동작 Test

동작하는지 test를 해보자!

 

package refill.station.config;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
@Slf4j
public class SlackTest {

    @PostConstruct
    public void slackTest() {
        log.error("print test error");
    }
}

 

그냥 아무데나 가서 log.error로 로그를 찍어보자!
slack으로 메시지가 날아오면 성공이다!!!

 

yml설정은 실제 프로젝트에 적용할 때는 배포용 yml에만 적용해주는 것이 좋다!
그렇지 않으면 local error가 slack으로 계속 날아오는 현상을 보게 될 것이다...
혹시 분리 방법을 모르겠다면 yml 설정 분리를 참고하자!