public class logBackController {
private final Logger LOGGER = LoggerFactory.getLogger(SwaggerController.class);
@GetMapping("/logExam")
public String getLogExam(String name) {
LOGGER.info("로그 테스트 : "+ name);
LOGGER.info("로그 테스트 : {}", name);
return name;
}
}
기본적으로 XML파일 명을 logback-spring.xml로 지정하면 스프링에서 읽어들입니다.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<property name="LOG_PATH" value="./logs"/>
<!-- Appenders -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<encoder>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] %logger LogOutPut : %msg%n</pattern>
</encoder>
</appender>
<!-- TRACE > DEBUG > INFO > WARN > ERROR > OFF -->
<!-- Root Logger-->
<root level="INFO">
<appender-ref ref="console"/>
</root>
</configuration>
5레벨중 INFO 레벨에 대한 로그만 출력하는 설정파일 내용 입니다.
XML파일 생성 후 컨트롤러에서 다음과같이 전역변수로 선언한 후 메소드 내에서 사용합니다.
private final Logger LOGGER = LoggerFactory.getLogger(SwaggerController.class);
다음은 logback을 활용해 로그를 출력하는 코드입니다.
String name = " '이름' 문자열 출력"
LOGGER.info("로그 테스트 : "+ name);
LOGGER.info("로그 테스트 : {}", name);
String age = "'나이' 문자열 출력"
LOGGER.info("로그 테스트 : "+ name + ", " + age);
LOGGER.info("로그 테스트 : {}, {}", name, age);
log4j와 같이 문자열에 {}를 입력한 뒤 ,쉼표로 구분하여 문자열이나 변수를 나열하면 순차적으로 바인드 됩니다.
public class logBackController {
private final Logger LOGGER = LoggerFactory.getLogger(SwaggerController.class);
@GetMapping("/logExam")
public String getLogExam(String name, Integer age) {
LOGGER.info("로그 테스트 : "+ name);
LOGGER.info("로그 테스트 : {}", name);
LOGGER.info("로그 테스트 : "+ name + ", " + age);
LOGGER.info("로그 테스트 : {}, {}", name, age);
return name;
}
}
만약 모든 컨트롤러에서 사용하고자 하는데 매번 선언하기 어려울때는 자바의 특성인 상속을 활용합니다.
이때 접근지정자는 protected를 선언합니다.
@Controller
public class BaseController {
protected final Logger LOGGER = LoggerFactory.getLogger(getClass());
}
동일한 패키지 내에 존재하거나 파생클래스에서만 접근 가능하도록 하기 위해서 입니다. (상속 받아 사용하기 때문)
또한 클래스는 명시적으로 지정하지 않고 가변적으로 읽어들일 수 있도록 getLogger메소드 매개변수에 getClass() 메소드를 호출->넘겨줍니다.
public class logBackController extends BaseController{
@GetMapping("/logExam")
public String getLogExam(String name, Integer age) {
LOGGER.info(name);
LOGGER.info("{}", name);
LOGGER.info(name + ", " + age);
LOGGER.info("{}, {}", name, age);
return name;
}
}
위와같이 출력됩니다.
저는 제가 알아보기 쉽고 간단하게 표현하고자 XML파일에서 pattern을다음과같이 설정했습니다.
<pattern>[%d{yy-MM-dd HH:mm:ss.SSS}] [%level] [%F] [%M] ▶ LOG : %msg%n</pattern>
아래와 같이 출력됩니다.
https://goddaehee.tistory.com/206
[스프링부트 (5)] Spring Boot 로그 설정(1) - Logback
[스프링부트 (5)] Spring Boot Log 설정(1) - Logback 안녕하세요. 갓대희 입니다. 이번 포스팅은 [ 스프링 부트 Log 설정 - 로그백] 입니다. : -) 1. Logback 이란? 특징? - 자바 오픈소스 로깅 프레임워크, SLF4J의
goddaehee.tistory.com
logback에 대해 기본적인 설정과 기본적인 구현 내용만 담았으며, 제 블로그보다 더 많은 내용을 얻을 수 있는 블로그 링크를 공유합니다.
추가적으로 전역 컨트롤러에서는 모든 컨트롤러에서 공통으로 사용도가 높은 이번시간에 정리한 '로그'나, 기타 유틸리티 기능들을 구현하고 해당 클레스를 상속받아 자식 컨트롤러에서 기능을 사용할 수 있도록 설계합니다.
logback의 추가 설정과, BaseController의 내용은 추후 포스팅을 통해 계속 이어서 작성하도록 하겠습니다.
감사합니다.
'SpringFramework' 카테고리의 다른 글
Spring Legacy Mybatis Execute Query 콘솔출력 (0) | 2024.02.18 |
---|---|
[Swagger3] spring doc 2.1.0 설정 및 Map<String,Object> 스키마 (0) | 2023.07.27 |
SpringData에서 제공하는 Pageable에 대한 잘못된 블로그 포스팅 (1) | 2023.02.20 |
미완성 [ property / 커맨드객체 / ${EL} / #{ } ] 문법별 set/get 메서드명 필드명 참조 기준 확인] (0) | 2020.09.04 |
스프링 DI 및 IOC xml에 Bean객체화 Container에 등록 (0) | 2020.08.28 |