본문 바로가기
Spring

log 관리 logback설정

by windy7271 2024. 2. 4.
728x90
반응형

 

로그의 종류에는 

log.debug("OK1");
log.info("OK2");
log.error("OK3");

 

debug, info, error 이렇게 3가지 종류가 있다.

 

application.yml 에서 로그 설정하는법은 밑에와 같다.

logging:
  file:
    name: logs/app.log
  level:
    root: info

logs/app.log 파일로 저장하게 하고

level : root: info로 info 이상만 로그에 찎히게 한다.

debug > info > error 순서이므로 위 상황에선 info와 error만 나온다.

 

하지만 모든성공로그와, 실패로그가 똑같은 곳에 나오게된다. 그래서 날짜별로 성공로그와, 실패로그를 따로 관리하기 위해 설정을 해보도록 하겠다.

 

전체적인 코드는 이렇다.

<?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>
</configuration>

 

<pattern>
    %d{yyyy-MM-dd HH:mm:ss} %logger{36}-%msg%n
</pattern>

이것은 메세지 패턴이다. 로그에 찎히는 메세지 형식을 커스텀 해주는 식이다.

 

 

한 개의 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>

 

filter 안에서 로그 이벤트를 필터링 하는데 사용한다. 

레벨은 error 이고 필터가 일치할 경우에만 허용한다.

 

로그 파일의 위치를 logs/ app-error.log 이다.

rollingPolicy는 로그파일의 롤링 정책이다.

즉 로그파일 이 어떻게 생겼는지이다. 저  파일네임패턴을 적용해두면  app.2024.02.02.log 형식으로 생기게된다

 

이런식으로 형성이된다.

app.log 와, app-error.log는 오늘 날짜이다. 내일 실행시키면 저것도 날짜로 바뀌어져있다.

 

 

- 성공로그

 

 

- 실패 로그

 

이렇게 성공로그와 실패로그를 level 을 설정해 따로 관리할 수 있으므로 추후 프로젝트때 에러 로그를 기록할 수 있게 된다.

지금 당장은 굳이 필요한가? 싶지만 나중에 원하는 에러로그를 찾을때 에러로그만 모여둔 곳에서 찾으면 되기 때문에 사용하는게 좋을 것 같다.

 

 

 

반응형

댓글