Logback
자바 로거 프로젝트 중 하나이며 종료된 log4j를 대체하기 위해 개발된 로그 프레임워크 입니다.
SpringBoot에서는 기본 logging system으로 채택되어 사용중입니다. log4j를 대체하기 위해 개발된 프로젝트인 만큼 기능, 설정방법또한 log4j와 많이 유사합니다.
로그 시스템을 이용하는 주된 이유는 정형화된 로그를 통해서 로그추적의 용이함입니다.
그에 걸맞게 패턴지정, 파일출력, 콘솔출력, SSL, Socket, DB등 다양한 로그 출력 방법들이 존재합니다.
기본개념
로그란 에러로그 일수도있고 디버깅상 필요한 로그, 혹은 개발 중 추적을 위한 로그가 될수도있다. 로그의 성격에 따라 logback의 경우 로그레벨을 5단계로 나누었고 설정을 통해서 특정 레벨 이상의 로그만 노출할 수 있다.
이와 같은 설정은 운영 / 개발서버 / 개발진행 등 런타임 환경에 따라 로그의 출력을 제어 할 수 있다.
ex) 운영상에서는 에러로그는 별도의 파일에 저장, 통계 혹은 데이터로의 활용가치 있는 로그의 경우 별도 파일 저장, 운영상 필요없는 로그 미노출 등등
예를들어서 INFO 레벨로 작성된 로그는 출력 로그레벨이 INFO,WARN,ERROR 인 상태에서만 볼 수 있다. 이점을 이용해서 런타임 환경별, 혹은 용도별로 로그를 분류한다.
또한 로그레벨뿐 아니라 로그를 출력하는 로그 패턴도 지정할 수 있다. logback에서 지원하는 로그패턴의 경우 다음과 같다.
로그패턴은 java를 통해서 커스텀이 가능하므로 원하는 로그패턴을 직접 작성할수도 있다.
PatternLayout 섹션밑에 정리된 Conversion 정리표를 통해서 확인할 수 있다.
http://logback.qos.ch/manual/layouts.html#conversionWord
사용방법
스푸링부트 기본 로그이므로 spring-boot-starter-web을 사용한다면 패키지 안에 spring-boot-starter-logging 안에 logback이 존재하므로 따로 모듈을 가져올 필요가 없다.
Maven
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
<scope>test</scope>
</dependency>
Gradle
// https://mvnrepository.com/artifact/ch.qos.logback/logback-classic
testCompile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.3'
모듈을 추가해야하는 상황이라면 위의 방법을 통해 해당 모듈을 가져올 수 있다.
Logback을 효과적으로 쓰기위해서는 별도의 설정이 필요한대 SpringBoot 환경에서는 기본적으로 org.springframework.boot:spring-boot.loggin.logback 패키지내 defaults.xml에 기본값이 설정되어있다.
스프링부트 환경에서는 기본적으로 로딩 시 logback.xml / logback-spring.xml 파일을 로딩해서 logback 설정을 하게되는데 logback.xml의 경우 properties파일로 선언한 변수는 사용할 수 없으므로 편의상 logback-spring.xml파일로의 설정을 권한다.
/resources/logback-spring.xml
<configuration>
<!-- Console Appender -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%highlight(%-5level) %d{HH:mm:ss} [%thread %green(%F:%L)] %cyan(%method) - %msg%n
</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
테스트를 위해서 INFO레벨에 로그에 색상을 입힌 CONSOLE이라는 Appender를 추가했다. Appender를 통해서 console, SSL, socket, DB, file등 로그 출력의 방법과 세세한 설정을 진행한다.
로그출력 확인을 위해 간단한 예제소스를 작성한다. 예제에서는 편의상 SLF4J를 사용했습니다.
public class DemoApplication {
final static Logger logger = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
logTest();
}
public static void logTest() {
User user1 = new User("user1", 20);
logger.info("test user name : {}, age : {}", user1.getName(), user1.getAge());
logger.debug("This message is debug level");
}
}
위의 소스에서 로그 출력물은 다음과 같습니다.
다음과 같이 정규화된 로그를 작성할 수 있게되었습니다. 본 예제에서는 기본적인 로그출력에 대해서만 다뤄보았습니다. Logback의 경우 console 뿐만 아니라 DB, File 등 여러형태의 Appender와 Log Filter를 통한 Appender내의 log level별 설정, 런타임 환경 구분을 위한 spring active profile등을 통해 분기처리하여 설정할 수 있는 유용한 기능들이 많습니다.
참고자료
https://coding-start.tistory.com/186
'Web > Spring' 카테고리의 다른 글
SLF4J로 보는 Facade pattern (0) | 2020.04.08 |
---|---|
Spring Boot MariaDB + Mybatis 연동하기 (0) | 2020.04.07 |
Spring Boot Profiles를 이용한 운영/개발 환경 구분 (1) | 2020.04.06 |