본문 바로가기
Spring/JPA

[Spring/JPA] 로그 관리

by windy7271 2024. 6. 25.
728x90
반응형

로그 : sout(”Hello world”); ⇒ 중요도 분리가 안된다. ⇒ 중요도에 따라 로그레벨 관리 해야한다.

  1. debug 모드 (모든 로그가 다 나온다.)
    1. log.debug(”debug 모드입니다.”)
  2. info 모드
    1. log.info(”일반로그”)
  3. error모드 (가장 엄격 , error 로그만 나온다.)
    1. log.error(”일반로그”)
  4. 로그 라이브러리 (log4j, logback)
  5. 로그관리 (debug, info, error)
  6. 로그파일관리
.yml

logging:
  level:
    root: info # info로 설정
    # trace < debug < info < error 순서의 로그레벨을 가진다.

 

사용방법 1.

@RestController
@Slf4j // log 어노테이션 (롬복)
public class LogTestController {

    @GetMapping("log/test1")
    public String testMethod1() {
        log.debug("OK1");
        log.info("OK2");
        log.error("OK3");

        return "OK";
    }
}

 

 

사용방법 2.

package com.encore.board.author.controller;

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

@RestController
public class LogTestController {

	private static final Logger log = LoggerFactory.getLogger(LogTestController.class)

    @GetMapping("log/test1")
    public String testMethod1() {
        log.debug("OK1");
        log.info("OK2");
        log.error("OK3");

        return "OK";
    }
}
  • Logback
    • log4j 보다 빠르고, 효율적이다.
    • SLF4J 인터페이스의 기본구현체이다.

로그 파일로 담기

.yml 설정

logging:
  file:
    name: log/app.log
  level:
    root: info # info로 설정
    # trace < debug < info < error 순서의 로그레벨을 가진다.

log/app.log 이 없으면 로그 파일을 만들어준다. (영구저장)

 

 

생성되었다.

yml 에서 로그 설정정보를 자세하게 쓸 수 없어 따로 파일로 분리하도록 하겠다.

log 에러와, info에러를 따로 분리하기 위한 설정을 한다.

yml과 같은 위치에 생성

 

 

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <!-- console 로그 관련 설정 -->
    <appender name = "CONSOLE" class = "ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm} %logger{36}-%msg%n
            </pattern>
        </encoder>
    </appender>
    

    <!-- info 로그의 경우 정상 log 파일로 분리-->
    <root level = "info">
        <!-- console 출력과, 정상 log파일에 log내용 추가 -->
        <appender-ref ref ="CONSOLE"/>
        <!--        <appender-ref ref ="FILE"/>-->
    </root>

</configuration>

<!--application. yml 에서 설정하던것을
더욱 상세하게 설정하기 위해서 따로 파일을 만든다.
-->

 

 

결과가 좀 다르게 나온다.

더 나아가서 에러로그와, info로그를 따로 관리하려고 한다.

<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
    <!-- console 로그 관련 설정 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm} %logger{36}-%msg%n
            </pattern>
        </encoder>
    </appender>

    <!--    정상 로그 관련 설정 -->
    <!--    로깅에서 rolling 는 날짜가 변함에 따라 별도의 파일 생성하는 것-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/app.log</file>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
            </pattern>
        </encoder>
        <!--        정책-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>

    <!--          에러 로그 관련 설정 -->
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <file>logs/app-error.log</file>
        <encoder>
            <pattern>
                %d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
            </pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/app-error.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
    </appender>
    <!-- info 로그의 경우 정상 log 파일로 분리-->
    <root level="info">
        <!-- console 출력과, 정상 log파일에 log내용 추가 -->
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </root>

 

 

 

 

에러 로그와 info 로그를 따로 관리 할 수 있다.

maxHistory : 날짜

fileNamePattern : 어떻게 넣을지

반응형

댓글