슬랙에 채널을 만들고 incoming Webhook 앱을 추가함 (위 링크 참고)
앱에 메시지 보내 지는지 테스트하는 방법
curl -d '{"text":"테스트메시지"}' -H "Content-Type: application/json" -X POST <webhook-url>
slack 에 로깅 이벤트를 보내줄 수 있는 appender가 정의되어 있는 의존성 추가
implementation
'com.github.maricn:logback-slack-appender:1.4.0'
logback-slack-appender
maricn • Updated Jun 20, 2023
logback-spring.xml 파일 추가
<configuration> <springProperty name="SLACK_WEBHOOK_URL" source="logging.slack.webhook-url"/> <!-- 해당 appender가 slack에 logging event를 보내주는 역할을 함 --> <appender name="SLACK" class="com.github.maricn.logback.SlackAppender"> <webhookUri>${SLACK_WEBHOOK_URL}</webhookUri> <username>${HOSTNAME}</username> <iconEmoji>:stuck_out_tongue_winking_eye:</iconEmoji> <colorCoding>true</colorCoding> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %msg %n</pattern> </layout> </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> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>${CONSOLE_LOG_PATTERN}</pattern> </encoder> </appender> <root level="info"> <appender-ref ref="STDOUT"/> <appender-ref ref="ASYNC_SLACK"/> </root> </configuration>
- slack appender 안의 프로퍼티 설명은 아래 깃헙 레포 참고
여기서 중요한건 springProperty
라는 property를 설정해서 application.yml에서 값을 가져온다는 점! [ Spring Boot 문서 참고 ]
<springProperty>
: Spring Environment에서 값을 가져올 수 있도록 해줌
- 파일이름을 logback.xml로 설정하면 spring이 뜨기도 전에 로드가 다 완료가 되기 때문에
스프링의 context를 활용하기 위해서는 파일이름을 logback-spring.xml 로 설정
해야 함 - 혹은 logging.config에 파일이름을 명시해주어야 함
- 근데 명시해주더라도 자동으로 load 되는 logback 파일 이름(logback.xml, logback-local.xml …)으로 설정이 되어 있으면 스프링 뜨고 나서 logback 설정하는 것 안먹음
- AsyncAppender [ 문서 ] — log event를 BlockingQueue에 쌓고 workerThread를 만들어서 큐에서 끄집어 내서 비동기로 처리하도록 함. 다른 appender를 참조하도록 구성해야함
- ThresholdFilter [ 문서 ] — 명시된 로그 레벨보다 높은 로그 레벨에 대해서만 동작하게 함