본문 바로가기
프로그래밍/Spring

logback-spring 에 관하여

by Mr-후 2024. 2. 22.
반응형

어제 있었던 일이다. 

로그 파일이 기하급수적으로 증가되고 있어 이상하다는 문제가 제기되었다. 

프로젝트를 전달 받은대로 사용한 것이 문제였다. 

앱 개발을 하던 내가 자바 스프링부트 프로젝트에 대해 전반적인 지식이 부족한 탓이기도 하다. 

logback에 대한 전반적인 정보를 제공한다기보다는, 앞으로 있을 프로젝트 셋팅에서 잊지 말고 체크해야 하는 포인트에 대해서 간략하게 정리를 하고자 한다. 

 

1.  application.yml파일에서 logging으로 설정 가능하다. 
더 구체적인 사항들도 있지만, 아래 코드에서 중요한 것은 config: classpath:정의 부분이다. 
해당 경로는 프로젝트의 resources/ 하위 디렉토리의 경로를 의미한다. 

logging:
  level:
    root: info
    org.hibernate:
      type.descriptor.sql: trace
      SQL: DEBUG
  config: classpath:logback-spring.xml

 

2. logback-spring.xml안에서의 주요 사항들을 정리해보자. 
xml 파일의 시작 선언 후, 

<configuration scan="true" scanPeriod="60 seconds">

해당 부분은, 설정정보를 어플리케이션이 스캔을 하도록 설정하고 스캔 간격은 60초로 지정한 것이다. 
실제 설정정보를 변경하고 잠시 기다리니, 반영되는 것이 확인 가능했다.

 

다음은 로그파일의 경로나 기본 설정에 대한 변수를 properties로 지정을 하는 방법에 대한 이야기다. 
이것은 application.yml파일의 spring.profiles.active와 연계되어 실행될 때 active로 설정된 프로파일과 동일하게 
logback-local.properties와 같은 파일을 선택 후 로드하게 된다는 의미이다. 

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

그 외에 property선언은 프로젝트별로 각양각색일 수 있을 것 같고, appender에 대한 중요한 부분에 대한 설명을 추가한다. 

	<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<file>${LOG_PATH}/${LOG_FILE_NAME}.log</file>
		<append>false</append>
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_PATH}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}_%i.log</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>10MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxFileSize>10MB</maxFileSize>
			<maxHistory>10</maxHistory>
		</rollingPolicy>
		<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
			<charset>UTF-8</charset>
			<pattern>${LOG_PATTERN}</pattern>
		</encoder>
	</appender>

rollingPolicy에 대해서 정리를 하자면, 
maxFileSize는 로그파일이 정해진 크기로 크지면, fileNamePattern에 정의된 형식으로 분가를 시키는 것이고, maxHistory는 그렇게 분가된 로그파일의 보관 기일이다. 이 값은 정해진 것은 없고 프로젝트 및 서비스 유지보수 정책과 로그 정책에 맞게 정의해서 사용하면 된다. 

만약, 저런 설정을 하면서 태그가 잘못 닫히거나, 오타가 있다면 로그파일이 분가하지 못하고 기하급수적으로 크질 수 있으니, 주의해서 설정하고 확인 할 필요가 있다. 

 

반응형