📌 글에서 사용한 코드 : 깃헙
Logback은 몇 년 전, 보안 취약점으로 인한 전세계적인 해킹사태로 유명해진(?) log4j
의 후속 라이브러리로 개발된 로깅 라이브러리이다.
Logback 라이브러리는 logback-core
, logback-classic
, logback-access
라는 3개의 모듈로 구성되어 있고, 다양한 상황에서도 손쉽게 도입할 수 있도록 개발되었다.
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
은 프로젝트 폴더 안의 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
은 더 디테일한 설정들을 할 수 있지만, 기본적으로는 이런 모양새를 갖는다.
<?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
옵션이 있는 경우에만 동작)롤링 정책의 경우, logback-spring.yml을 만들어주지 않아도 기본 설정파일에서 어느 정도 설정할 수 있다.