HyunJun 기술 블로그

스프링 프레임워크 Logback Discord Log 자동화하기 본문

Spring Framework

스프링 프레임워크 Logback Discord Log 자동화하기

공부 좋아 2023. 5. 15. 15:15
728x90
반응형

1. Log 자동화의 장점?


로그는 일반적인 초급 단계의 개발에서는 필요성이 떨어지지만, 실 서버 프로그램과 운영에 있어서는 매우 중요한 요소이다.

 

  • 비정상적인 접근 및 대량의 트래픽 발생 유도, 해킹 시도 등을 감지할 수 있다.
  • 프로그램의 기능적인 이상(버그)에 대해서 미리 감지할 수 있다.
  • 한글로 된 블로그 중에 Slack에서의 Log 활용 글은 많았지만, Discord에서의 활용은 많이 없는 것 같아 정리해 보았습니다.

2. Discord 서버 생성

+ 버튼(서버 추가하기) 클릭 -> 직접 만들기

 

서버 이름 설정 후 만들기 클릭

 

 

 

 

3. Discord Webhook 설정

 

웹후크 만들기 클릭

 

이름 설정, 채널 확인, 변경사항 저장하기 클릭 -> 웹후크 URL 복사하기

 

 

 

4. Spring 구현하기

build.gradle

repositories {
    mavenCentral()
    maven { url 'https://jitpack.io' }
}

dependencies {
// Slf4j
compileOnly 'org.projectlombok:lombok'
annotationProcessor 'org.projectlombok:lombok'

// Logback Appender Discord
implementation 'com.github.napstr:logback-discord-appender:1.0.0'
}

참고한 github (discord-appender)

 

 

 

application.yml

logging:
  discord:
    webhook-uri: 웹훅url주소
  config: classpath:logback-spring.xml

 

 

 

 

 

resources/logback-spring.xml

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <!--Discord Log-->
    <springProperty name="DISCORD_WEBHOOK_URI" source="logging.discord.webhook-uri"/>
    <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} %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 %-5level %logger{35} - %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>

 

 

 

 

TestController

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


@Slf4j
@RestController
public class TestController {

    @GetMapping("/test")
    public void test() {

        log.warn("위험..");
        log.error("에러 발생1!!!");
        log.error("에러 발생2!!!");


    }
}

 

 

5. 확인하기

localhost:8080/test로 접근해 확인합니다!

콘솔 / 디스코드

728x90
반응형
Comments