Back-end Skill/Springboot

스프링을 사용하여 로그를 남기고 로그 파일 추출하는 법

Sophie소피 2022. 12. 29. 15:36

slf4j 를 사용하여 로그를 남기는 방법

import org.slf4j.LoggerFactory
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class LogController {
    private val logger = LoggerFactory.getLogger("LoggerController 의 소피로그")

    @GetMapping("/log")
    fun log() {
        logger.info("~~~~~~~~~~Hi ALLL~~~~ SophieLog ~~~~~~")
        logger.error("~~~~~~~~~~Hi ALLL~~~~ SophieERRORLog ~~~~~~")
    }
}
import org.slf4j.LoggerFactory
import org.springframework.stereotype.Service

@Service
class LogService {
    private val logger = LoggerFactory.getLogger(this.javaClass.simpleName)
    fun log() {
        logger.trace("Trace")
        logger.debug("Debug")
        logger.info("Info")
        logger.warn("Warn")
        logger.error("Error")
    }
}

 

logback 적용 후 로그 출력

build.gradle.kts에 logback 추가

  • build.gradle.kts
implementation("org.springframework.boot:spring-boot-starter-web") 
or
implementation("org.springframework.boot:spring-boot-starter-logging")

src > main > resources > logback-spring.xml 파일 생성

  • logback-spring.xml 코드 스니펫
<?xml version="1.0" encoding="UTF-8"?>
<configuration sacn="true" scanPeriod="60 seconds">
    <!-- 60초마다 설정 파일의 변경을 스캔 -->

    <springProfile name="sophie">
        <property resource="logback-sophie.properties"/>
    </springProfile>

    <property name="LOG_PATH" value="${logPath}"/>

    <property name="CONSOLE_LOG_PATTERN"
              value="%d{MM-dd HH:mm:ss.SSS} %highlight(%-5level) %magenta(%-4relative) --- [ %thread{10}] [%logger{36}]: %msg%n"/>
    <!--로그 패턴 정의-->
    <property name="FILE_NAME" value="log-test-logs"/>
    <!--상수 값 정의-->

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--FILE 이라는 이름의 로그 형태 정의, class - 특정 시간 또는 크기를 기준으로 로그 파일을 생성 -->
        <!--error 레벨만 필터링 다른 레벨은 무시-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!--생성할 로그 파일 경로 + 이름-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
        <!--파일 생성 정책 - 시간 기준 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--파일 생성 정책 - 시간 기준 -->
            <fileNamePattern>${LOG_PATH}/${FILE_NAME}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>7</maxHistory>
            <!--파일 최대 보관 기간 (90일) -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 크기별 로그 파일 생성 -->
                <maxFileSize>10MB</maxFileSize>
                <!-- logback-sophie.properties 에 정의한 최대 maxFileSize(10Mb) 만큼 마다 로그파일을 생성-->
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
    </appender>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--CONSOLE 이라는 이름의 로그 형태 정의, class - 콘솔에 로그를 찍음-->
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--출력할 로그 인코더 설정 (PatternLayoutEncoder 는 default 설정이라 생략가능) -->
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
            <!--위의 property 로 정의한 콘솔 로그 패턴으로 출력-->
        </encoder>
    </appender>

    <springProfile name="sophie">
        <root level="ERROR">
            <appender-ref ref="FILE"/>
            <appender-ref ref="CONSOLE"/>
        </root>
        <root level="INFO">
            <appender-ref ref="FILE"/>
            <appender-ref ref="CONSOLE"/>
        </root>
    </springProfile>

</configuration>

 

 

log4j2 적용 후 로그 출력

build.gradle.kts에 log4j2추가

  • build.gradle.kts
implementation("org.springframework.boot:spring-boot-starter-web")
implementation("org.springframework.boot:spring-boot-starter-log4j2")
modules {
module("org.springframework.boot:spring-boot-starter-logging") {
replacedBy("org.springframework.boot:spring-boot-starter-log4j2")
    }
}

 

src > main > resources > log4j2.xml 파일 생성

  • log4j2.xml 코드 스니펫
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <Appenders>
        <File name="File" fileName="/Users/greej/Desktop/logs/log4j2.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </File>

        <Console name="Console">
            <PatternLayout disableAnsi="false" pattern="%d${LOG_DATEFORMAT_PATTERN} %highlight${LOG_LEVEL_PATTERN}"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root>
            <AppenderRef ref="File" level="error"/>
            <AppenderRef ref="Console" level="error"/>
        </Root>
    </Loggers>
</Configuration>