본문 바로가기
IT 정보

Spring boot] 로그 설정 편하게 하기(application.properties)

by 완기 2022. 6. 5.
728x90
반응형

 

기존에 logback설정을 xml 형식으로 진행했었다.

 

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

  <property name="FILE_NAME" value="today"/>
  <property name="PATH" value="/home/ec2-user/logs"/>

  <!--  sql log-->
  <!--  <logger name="jdbc.sqltiming" level="DEBUG"/>-->

  <!--어디에, 어떤 포맷으로 로그를 남길지 -->
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%line] - %msg%n</pattern>
    </encoder>
  </appender>

  <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${PATH}/${FILE_NAME}.log</file>
    <!--언제 백업될지-->
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <fileNamePattern>${PATH}/%d{yyyy-MM-dd}.log</fileNamePattern>
      <!--처음으로부터 최대 30개 생성,넘어가면 이전 로그 삭제-->
      <maxHistory>7</maxHistory>
    </rollingPolicy>

    <encoder>
      <pattern>%-5level %d{yy-MM-dd HH:mm:ss}[%logger{0}:%line] - %msg%n</pattern>
    </encoder>
  </appender>

  <root level="info">
    <!--  <root level="debug">-->
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>

</configuration>

 

이 형태가 기존에 logback-spring.xml 파일이었다.

해당 이름으로 명명한 xml 파일은 spring은 자동으로 로그백 config파일로 인식했다.

 

저 xml 형태를 어딘가 지정해두고 매번 복사 붙여넣기...

이 과정이 매우 번거로웠다.

 

application.properties 파일에 설정할 수 있지 않을까? 좀 더 편하게 하고 싶은데...라는 생각에서 출발한 방법을 소개한다.

 

 

일단 application.properties에서 logging. 을 찍어보면 다양한 자동완성이 뜬다.

 

자세한 항목별 설명은 여기를 참고하기 바란다.

 

Common Application Properties

 

docs.spring.io

 

 

기본적으로 나는 일자별로 로그를 관리하고 싶었다.

 

그렇기 때문에 파일 이름을 지정할 수 있는 

log.file.name에 spEL을 넣거나 EL을 넣거나 별 짓을 다해서 오늘의 날짜 포맷을 yyyy-MM-dd 형태로 뽑기 위해 인터넷도 뒤져보고 

이것저것 시도해봤지만 실패했고,

 

spring boot 메인 클래스에 System.setProperty를 통해 해결했다.

 

 

이와 같이 작성하게 되면 application.properties파일에 항목을 하나 추가한 것과 동일하다.

이와 같이 설정하고 스프링 부트를 실행하게 되면.

 

파일이 날짜 형식에 맞게 잘 생성되었다.

하지만 의문이 들었다. 왜 때문에 프로젝트 루트 경로에 생성되어계시죠...?

이대로 빌드된 채로 배포하게 되면 ssh에서 로그를 확인할 수 없다.

 

300x250

 

그래서 logging.file.path 항목을 사용해서 데스크톱 경로를 지정해봤지만 결과는 동일했고,

인터넷 검색 후 결과를 찾았다. (출처)

그냥 file.name 항목에 절대 경로로 입력해주면 해당 위치에 잘 생성이 된다.

이것을 환경을 나눠 ec2 홈 경로로 작성해주면 된다.

 

그러면 여기서 드는 의문이 하나 있다.

스프링이 실행되고 이미 properties파일을 스캔해서 잘 실행했다.

 

그럼 날짜 바뀌면 파일이 따로 잘 생성될까?라는 의문이다.

 

그래서 SimpleDateFormat에 시간과 분을 추가해봤다.

로그를 찍기 위해 

간단히 컨트롤러를 작성했고

어제 테스트까지만 해도 파일이 분단위로 잘 떨어졌는데 오늘은 왠지 한 파일에 합쳐져 있다... 흠... 이유는 아직 잘 모르겠다.

일자별로는 잘 파일이 나뉘는 것을 확인했었다.

 


내가 실제로 사용한 항목은 다음과 같다.

application.properties

#log파일의 최대 보관일수
logging.logback.rollingpolicy.max-history=7
#로그파일 output file의 시간 포맷
logging.pattern.dateformat=yyyy-MM-dd HH:mm
#로그 표기 레벨. 예시를 위함 실제론 fatal을 쓰진않았음.
logging.level.root=fatal

실제로 스프링을 실행하면 나오는 info 로그들이 뜨지 않았다.

 

logging.level항목은 라이브러리의 항목별로 로그 레벨을 다르게 설정할 수 있고,

.root은 가장 상위의 로그 레벨 항목 설정이다.

 

그리고 메인클래스에 절대 경로 + 파일명.log이다.

 

앞으로 로그 설정을 위해 xml을 복사 붙여넣기하는 번거로운 일은 없어질 수 있게 되었다.

 

출처 : 

 

Common Application Properties

 

docs.spring.io

 

logging.file.name 과 logging.file.path

Properties 명만 보면 Logging이 기록되는 파일 이름과 경로를 지정해줘야 되는것 같다. * 위와 같이 지...

blog.naver.com

 

728x90
728x90

댓글