HyunJun 기술 블로그

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

Spring Framework

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

공부 좋아 2023. 5. 14. 22:47
728x90
반응형

1. Logback이란?


기존에 log 관리로 사용되던 log4j의 후속 버전이며, log4j를 설계한 Ceki Gulgu에 의해 설계되었습니다.

 

  • XML로 logging 설정
  • 별도의 삭제 스케줄러 설정 및 개발 필요 없이, maxHistory 설정값을 이용해 일정 기간이 지나면 로그파일 자동 삭제가 가능
  • Filter 기능: 사용자별 level 조정 가능
  • 로그 레벨 변경 시 내부를 스캐닝 하는 별도의 스레드가 있어 서버 재기동을 할 필요성 없음.

2. Slcak 설정하기

구현에 앞서 Slack에서의 채널부터 만들어 볼까요?

 

 

 

Slack 찾아보기 -> 앱 -> WebHooks -> 추가

 

 

 

Slack에 추가 클릭

 

채널을 선택한 후, 수신 웹후크 통합 앱 추가 클릭

 

URL을 복사해서 메모장에 저장해 주세요.

 

 

 

더 내려서 설정 저장 클릭

 

 

 

3. Spring Log 설정하기

 

build.gradle

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

// Slack
implementation 'com.github.maricn:logback-slack-appender:1.4.0'

 

application.yml

logging:
  slack:
    webhook-uri: https://hooks.slack.com/services/발급받은webhook-uri
  config: classpath:logback-spring.xml

 

 

resources 디렉터리 아래에 logback-spring.xml 파일 생성

<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
    <springProperty name="SLACK_WEBHOOK_URI" source="logging.slack.webhook-uri"/>
    <appender name="SLACK" class="com.github.maricn.logback.SlackAppender">
        <webhookUri>${SLACK_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>
        <iconEmoji>:interrobang:</iconEmoji>
        <colorCoding>true</colorCoding>
    </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_SLACK" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="SLACK"/>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!--            슬랙에 전송할 로그 레벨 지정-->
<!--            <level>Info</level>-->
            <level>Warn</level>
<!--            <level>ERROR</level>-->
        </filter>
    </appender>

<!--    콘솔에서 보여질 로그 레벨 지정-->
    <root level="INFO">
        <appender-ref ref="Console" />
        <appender-ref ref="ASYNC_SLACK"/>
    </root>
</configuration>

 

 

 

 

<iconEmoji>:interrobang:</iconEmoji>에 이모지를 등록할 수 있으며, 슬랙의 메시지 입력창에서 이모티콘을 선택한 후, Ctrl + C(Command + c)로 복사를 하고, xml 창에서 붙여 넣기 하면 문자열로 된 값으로 사용할 수 있습니다.

 

 

4. 확인하기

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
public class TestController {

    private final Logger logger = LoggerFactory.getLogger("Logger");

    @GetMapping("/log")
    public void logTest() {
        logger.info("인포 로그");
        logger.warn("워닝 로그");
        logger.error("에러 로그");
    }
}

 

 

728x90
반응형
Comments