조금 더 빠른 에러 대응을 위해 운영중인 시스템의 ERROR 로그 를 사내에서 사용하는 슬랙으로 받고 싶었다.
해당 기능을 구현하며 경험하고 배운 내용들을 정리해보려한다.
열심히 구글링을 하니 다행이 내가 구현하고 싶은 기능들을 먼저 구현한 사람들이 많았다.
먼저 단계를 설정하고 그 단계들을 따라가는 방식을 택했다.
구현 단계 설정
1. 슬랙에서 메시지를 보낼 봇 생성
2. logback
설정 파일 내 SlackAppender
추가
슬랙 봇 생성하기 해당 사이트를 따라 메시지를 보낼 봇을 생성했다. ERROR_BOT
logback-slack-appender 누군가가 쓰기 좋게 라이브러리를 만들어 놓아서 사용하기로 했다.
// SLACK-BOT
implementation group: 'com.github.maricn', name: 'logback-slack-appender', version: '1.6.1'
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<!-- 그 외 로직들 -->
<!-- SLACK Appender: Custom -->
<appender name="SLACK" class="com.github.maricn.logback.SlackAppender">
<!-- Slack API token -->
<token>{your API token}</token>
<!-- 타겟 채널 - default is #general -->
<channel>#{yout target channel}</channel>
<!-- 서식 지정 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] [%-5level] %c{3}%n %msg%n</pattern>
</layout>
<!-- 메시지를 보낼 봇 이름 또는 username -->
<username>ERROR_BOT</username>
</appender>
<!-- 현재 권장되는 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>
<!-- 그 외 로직들 -->
</configuration>
운영환경에만 적용하려고 아래와 같이 설정해 주었다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<configuration>
<!-- 그 외 로직들 -->
<!-- 운영 환경 -->
<springProfile name="real">
<property name="classPath" value="{yourClassPath}" />
<property name="logDir" value="${classPath}/logs"/>
<root level="INFO">
<appender-ref ref="appender1" />
<appender-ref ref="appender2" />
<appender-ref ref="appender3" />
<appender-ref ref="ASYNC_SLACK" />
</root>
</springProfile>
<!-- 그 외 로직들 -->
</configuration>
위와같이 슬랙으로 ERROR 메시지가 온다...!
조금 더 라이브러리나 구글링을 해보고 다듬어봐야겠다.