[Spring] logback-spring.xml를 통한 로깅 최적화

🔥Log·2024년 2월 27일
0

스프링

목록 보기
14/18

📌 글에서 사용한 코드 : 깃헙

🤔 Logback


Logback은 몇 년 전, 보안 취약점으로 인한 전세계적인 해킹사태로 유명해진(?) log4j의 후속 라이브러리로 개발된 로깅 라이브러리이다.

Logback 라이브러리는 logback-core, logback-classic, logback-access라는 3개의 모듈로 구성되어 있고, 다양한 상황에서도 손쉽게 도입할 수 있도록 개발되었다.

Logback과 Spring boot

Logback은 spring-boot-starter안에 포함되어 있어서, spring-boot-starter-web과 같은 라이브러리를 설치하면 자동으로 설치가 된다.

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'

	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testCompileOnly 'org.projectlombok:lombok'
	testAnnotationProcessor 'org.projectlombok:lombok'
}

나는 편의를 위해서 web 스타터와 lombok을 같이 설치해주었다.


📒 logback-spring.xml


파일의 위치

logback-spring.xml은 프로젝트 폴더 안의 resources 폴더에 위치시키면 된다.
logback-spring.xml에 정의된 설정은 application.yml 또는 application.properties와 같은 기본 설정 파일에 정의도니 설정보다 높은 우선 순위로 logback에 적용된다.

파일의 구조

<configuration>

    <!-- appender : 로그 출력 위치를 정의 (콘솔, 파일) -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoder : 로그 출력 형식을 정의 (날짜, 쓰레드, 로그 레벨, 로거 이름, 메세지등등) -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- logger : 특정 패키지 또는 클래스에 대한 로깅 레벨을 지정 -->
    <logger name="com.example" level="DEBUG"/>

    <!-- root : 최상위 로깅 설정을 지정 -->
    <root level="INFO">
        <!-- CONSOLE 이라는 appender 설정을 사용 -->
        <appender-ref ref="CONSOLE"/>
    </root>

</configuration>

logback-spring.xml은 더 디테일한 설정들을 할 수 있지만, 기본적으로는 이런 모양새를 갖는다.

예시 : 특정 profile에 설정 적용 + 콘솔, 파일에 로그 다 찍기

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <springProfile name="default, local">
        <property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level --- [%thread] %class : %m%n" />
        <property name="LOG_DIR" value="log"/>

        <appender name="file-appender" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${LOG_DIR}/application.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>${LOG_DIR}/application.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
                <maxFileSize>10MB</maxFileSize>
              	<maxHistory>7</maxHistory>
                <totalSizeCap>1GB</totalSizeCap>
            </rollingPolicy>

            <encoder>
                <pattern>${LOG_PATTERN}</pattern>
            </encoder>
        </appender>

        <appender name="console-appender" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>${LOG_PATTERN}</pattern>
            </encoder>
        </appender>
    </springProfile>
	
  	<!-- additivity : 상위 로거의 설정을 상속받을 것인지 여부 -->
    <logger name="SomeLogger" level="warn" additivity="false">
        <appender-ref ref="file-appender"/>
    </logger>

    <root level="info" >
        <appender-ref ref="console-appender" />
        <appender-ref ref="file-appender" />
    </root>
</configuration>
  • <springProfile> : 특정 profile에만 설정을 적용할 수 있다.
  • <property> : 파일 내에서 변수처럼 사용할 수 있다.
  • <appender> - <file> : 파일에 로깅을 하는 경우, 로깅할 파일명을 설정한다.
  • <rollingPolicy> : 롤링 옵션들을 정의한다.
  • <rollingPolicy> - <fileNamePattern> : 백업 로그 파일의 위치와 네이밍 룰을 정의한다.
  • <rollingPolicy> - <maxFileSize> : 개별 로그 파일의 최대 용량이다. 이 값이 넘으면, 백업 파일로 생성(롤링)되게 된다.
  • <rollingPolicy> - <maxHistory> : 로그 파일들을 얼마동안 갖고 있을지에 대한 설정 (Day)
  • <rollingPolicy> - <totalSizeCap> : 로그 파일들의 총 용량 (maxHistory옵션이 있는 경우에만 동작)

📌 application.yml 또는 application.properties

롤링 정책의 경우, logback-spring.yml을 만들어주지 않아도 기본 설정파일에서 어느 정도 설정할 수 있다.


🙏 참고


0개의 댓글