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.gradle에 logback-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를 참고했다!
layout의 pattern 부분을 설정하면 날짜와 시간도 찍을 수 있다.
하지만 slack에 시간이 나와서 나는 안 찍기로 했다.
(물론 실제 오류 발생 후 메시지를 송신하는데 걸리는 시간때문에 차이가 생기지만,
어차피 크게 차이 나지 않으므로 신경쓰지 않기로 했다!
정확하게 시간까지 찍고싶으면 pattern을 적당히 수정하면 된다!! 난 안 하니까 패스한다.)
SLACK_WEBHOOK_URI는 직접 입력해도 된다.
직접 입력하는 경우 application.yml의 webhook 설정도 지워도 된다!
최상단의 include는 spring boot의 기본 logback 파일을 불러오는 설정이다.
spring 공식 document를 참고했다!
이렇게 불러오기를 안 하면 console 관련 log 설정을 직접 해야 한다.
최하단에 보이는 root의 level은 원래(github 참고) ALL로 설정되어있었는데, INFO로 변경하였다!
이외에 궁금한 부분은 직접 찾아보자!
logback-slack.xml은 resources 폴더 밑에 만들었습니다.
동작 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 설정 분리를 참고하자!