팀 프로젝트를 진행하면서 Error 로깅을 따로 저장하여 이슈를 확인할 필요성을 느꼈습니다. 그래서 Discord, Slack 중 고민하게 되었는데요. Slack의 경우 무료계정은 90일 동안만 로그가 보관 가능하다고 합니다. 그래서 Discord에 Error 로깅을 남기기로 결정했습니다.
1. 우선 Gradle에 의존성을 추가해야 합니다.
repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}
dependencies {
implementation "com.github.napstr:logback-discord-appender:${discordWebHookVersion}"
}
2. 다음은 스프링 환경설정입니다.
2 - 1. local 환경과 dev환경 나누기
Resources 폴더에 logback-local.xml 과 logback-dev.xml 파일을 생성합니다.
개발 환경이 나누는 것이 궁금하시다면 이전에 작성했던 스프링 부트 개발환경 분리하기를 읽어주시기 바랍니다!.
폴더 구조

logback-dev.xml
mysql dev 환경을 담당하는 logback 파일 입니다.source 명을 잘 확인해서 application.yml 파일에 명시해야 합니다.
webhook 주소를 제대로 찾지 못하면http or https 를 찾을 수 없다는 에러가 발생합니다.level 에서 로깅 레벨을 지정합니다. 에러를 확인하는 용도라서 ERROR로 설정했습니다.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--Discord Log-->
<springProperty name="DISCORD_WEBHOOK_URI" source="logging.discord.webhook-uri-dev"/>
<appender name="DISCORD" class="com.github.napstr.logback.DiscordAppender">
<webhookUri>${DISCORD_WEBHOOK_URI}</webhookUri>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{40} [%-5level] %msg %n</pattern>
</layout> <username>Spring-Server-log</username>
<avatarUrl>https://img.freepik.com/premium-photo/server-logs-analysis-closeup-developing-programming-and-coding-technologies-developer-working-on-web-sites-codes-in-office_372999-779.jpg</avatarUrl>
<tts>false</tts>
</appender>
<!--Consol appender 설정-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <Pattern>[콘솔] %d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</Pattern>
</encoder> </appender>
<appender name="ASYNC_DISCORD" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="DISCORD" />
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter> </appender>
<!--로그 레벨 지정-->
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="ASYNC_DISCORD" />
</root></configuration>
logback-local.xml
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--Discord Log-->
<springProperty name="DISCORD_WEBHOOK_URI" source="logging.discord.webhook-uri-local"/>
<appender name="DISCORD" class="com.github.napstr.logback.DiscordAppender">
<webhookUri>${DISCORD_WEBHOOK_URI}</webhookUri>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %logger{40} [%-5level] %msg %n</pattern>
</layout> <username>Spring-Server-log</username>
<avatarUrl>https://img.freepik.com/premium-photo/server-logs-analysis-closeup-developing-programming-and-coding-technologies-developer-working-on-web-sites-codes-in-office_372999-779.jpg</avatarUrl>
<tts>false</tts>
</appender>
<!--Consol appender 설정-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder> <Pattern>[콘솔] %d{HH:mm:ss.SSS} [%-5level] %logger{36} - %msg%n</Pattern>
</encoder> </appender>
<appender name="ASYNC_DISCORD" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="DISCORD" />
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter> </appender>
<!--로그 레벨 지정-->
<root level="INFO">
<appender-ref ref="Console"/>
<appender-ref ref="ASYNC_DISCORD" />
</root></configuration>
Application.yml
Default 설정으로 현재 profiles 값을 설정합니다
local 이라면 logback-local .xml, dev라면 logback-dev.xml 파일을 읽습니다.
logging:
config: classpath:logback-${spring.profiles.active}.xml
spring.config.import: classpath:discord.properties
dev 환경인 경우
---
spring.config.activate.on-profile: dev
...
logging:
discord:
webhook-uri-dev: ${DISCORD_WEBHOOK_DEV_URL}
local 환경인 경우
---
spring.config.activate.on-profile: local
...
logging:
discord:
webhook-uri-local: ${DISCORD_WEBHOOK_LOCAL_URL}
discord.properties
웹훅 API 정보는 민감한 정보라서 외부로 노출되면 안됩니다. 별도의 파일로 관리합니다.
DISCORD_WEBHOOK_LOCAL_URL=웹훅 주소명
DISCORD_WEBHOOK_DEV_URL=웹훅주소명
3. DISCORD 서버 만들기 및 설정
이제 디스코드에서 서버를 만들어야 합니다.
+ 버튼을 클릭해서 서버를 생성해줍니다.
직접 만들기, 클럽 커뮤니티, 나와 친구들 아무거나 선택하셔도 됩니다.

서버 생성 이후
서버를 생성하시면 1번 버튼을 클릭하면 리스트 목록 중 서버 설정을 들어갑니다.
2번의 경우 채팅 채널을 만드는 기능입니다.

연동 탭에서 웹후크 만들기
- 연동 탭을 클릭합니다.
- 새 웹후크를 클릭하면 새로 만들어집니다.
- 빨간 글씨 1번을 클릭하시면 URL 복사가 있습니다. 그 내용을 discord.properties에 저장합니다.
- 그 이후 log.error()로 에러 메세지가 제대로 연동 되는지 확인 하시면 됩니다!.

결과

긴 글 읽어주셔서 감사합니다!.
참고자료
logback-discordAppender
https://velog.io/@devlyny/Spring-Boot-%EC%9D%B4%EB%B2%A4%ED%8A%B8-%EB%B0%9C%EC%83%9D-%EC%8B%9C-Discord-%EC%95%8C%EB%A6%BC-%EC%84%A4%EC%A0%95
'Framework & Library > Spring' 카테고리의 다른 글
| Spring boot 3. H2 DB와 CONSOLE 환경 설정하기 (0) | 2024.04.24 |
|---|---|
| Springboot 3 개발 환경 분리하기(with H2DB, MYSQL, Intellij) (0) | 2024.04.23 |
| spring boot 3.x.x swagger 설정 및 file upload 문제 해결 (0) | 2024.04.17 |