Logback이란 log4j 이후에 출시된 Java 기반 Logging Framework 중 하나로 가장 널리 사용되고 있다. SLF4j 의 구현체이며 Spring Boot 환경이라면 별도의 dependency 추가 없이 기본적으로 포함되어 있다.
application.yml에 logback을 설정하는 방법과 logbakc.xml을 작성하여 설정하는 방벙이 있는데 나는 xml로 작성하는 방식을 택하였다. 왜냐하면 세부적인 설정이 불편하고 따로 xml을 만들어서 관리하는 것이 보기도 간단하고 관리도 편할 것 같아 선택하였다.
먼저 logback.xml을 작성하여야 한다.
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty name="DISCORD_WEBHOOK_URL" source="logging.discord.webhook-url"/>
<appender name="DISCORD" class="com.github.napstr.logback.DiscordAppender">
<webhookUri>${DISCORD_WEBHOOK_URL}</webhookUri>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{HH:mm:ss} [%thread] [%-5level] %logger{36} - %msg%n```%ex{full}```</pattern>
</layout>
<username>WanF-logback</username>
<avatarUrl>https://cdn-icons-png.flaticon.com/512/1383/1383395.png</avatarUrl>
<tts>false</tts>
</appender>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<charset>utf8</charset>
</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="ASYNC_DISCORD"/>
<appender-ref ref="Console"/>
</root>
</configuration>
<configuration> 블록 안에 설정할 명령어를 넣어야 한다. 나는 logback을 discord의 webhook을 이용하여 오류 서버 오류 발생시 discord를 통해 보기 위해 위와 같이 설정하였다. 첫번째 appender 부분은 디스코드에 어떻게 출력할 것인지와 discord-webhook-url을 지정해주었다. 두번째 appender에는 콘솔에 어떻게 로그를 출력할 것인지 보여주는 것이고 세번째 appender는 어떤 이벤트 발생시 로그를 출력할 것인지를 설정해 주었다.
스프링 프로젝트에도 설정해줄 부분이 있는데 나는 discord appender를 사용해야 하기 때문에 logback-discord-appender를 먼저 build.gradle에 implementation해주어야 한다.
implementation 'com.github.napstr:logback-discord-appender:1.0.0'
그 후에 application.yml에 logging.discord.webwook-url: ${디스코드_웹훅_URL}을 적어주고 config에는 미리 작성해둔 logback.xml파일을 지정해준다.
logging:
discord:
webhook-url: ${DISCORD_WEBHOOK_URL}
config: classpath:logback.xml
마지막으로 discord webhook을 만들어주어야 한다.
디스코드 채널 설정에 들어가서 연동을 누르면 위와 같은 화면이 뜬다. 여기서 웹 후크 만들기를 누르면
이렇게 뜨는데 새 웹후크 만들기를 클릭하면 웹 후크가 만들어진다. 그러면 이 웹후크의 url을 복사해서 프로젝트의 환경변수에 넣어주면 설정이 완료된다.
이렇게 서버에서 오류가 발생하면 discord에 바로 로그가 뜰 수 있게 된다. 이렇게 하면 따로 배포 서버에 들어가서 로그를 보지 않아도 언제든지 로그를 볼 수 있게되어 굉장히 편리하고 쉽게 오류를 알 수 있게 된다. 또한 나는 오류만 이렇게 뜨게 만들어 놓았지만 프로젝트와 개발 환경에 맞게 logback.xml을 잘 작성하면 프로젝트 관리와 모니터링을 쉽게할 수 있을 것이다.
Logback이란 것을 모르고 SLF4j로 console에만 로그를 찍고 있었는데 같이 프로젝트를 진행했던 친구가 Logback을 Slack이나 Discord로 설정하는 법을 알려줘서 처음알게되었다. 이렇게 로그백을 설정할 때 로컬에서 개발할때는 굳이 필요가 없었지만 서버를 배포하고 클라이언트와 연결하는 과정에서 이 로그백이 굉장히 도움이 많이 되었다. 이를 잘 사용한다면 보다 더 효율적으로 사용할 수 있을 것 같다.
참고
https://techblog-hyunjun.tistory.com/14
https://github.com/HanHyunsoo/Slack-Logback-Test