본문 바로가기
SpringBoot/(책)스프링부트 시작하기

[springboot] 5. springboot Logback 설정하기

by 평범한kiki 2023. 4. 23.

Logback
- log4j 기반으로 작성됨
- log4j 성능보다 10배 정도 빠르고 메모리 사용량도 적다.
- log4j는 로그설정을 변경할 경우 서버를 재시작해야 반영되었는데
  Logback은 로그설정이 변경될 경우 서버를 재시작하지 않아도 바로 반영된다
- Logback 로깅 구현제로 slf4j(Simple Logging Facade for Java)를 함께 사용
  slf4j는 자바의 다양한 로그 모듈들의 추상체로 자바의 인터페이스와 비슷한 역할을 한다.
  slf4j의 API를 이용할 경우 실제 로깅을 담당하는 로깅 구현체으 ㅣ종류와 상관없이 일관된 로그 코드를 작성가능.
  로그출력 등 로깅코드는 slf4j를 이용하면 내부적으로는 log4j,Logback 같은 로깅구현체가 그 기능을 구현한다
- 스프링 부트는 Logback 기본으로 사용

 

1. Logback 설정
 -  /board/src/main/resources/logback-spring.xml 만들기

 - appender는 로그를 어디에 출력할지 결정(콘솔,파일기록,DB저장등)

- logger는 로그를 출력하는 요소로 Level 속성을 통해서 출력할 로그의 레벨을 조절하여 appender에 전달

  아래에서는 debug레벨의 로그를 출력하는 형식은 console이라는 이름의 appender 사용

 
<?xml version="1.0" encoding="UTF-8" ?>
<configuration level="debug">
	<!--appender는 로그를 어디에 출력할지 결정(콘솔,파일기록,DB저장등)-->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
	      <!--<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>-->
	      <pattern>%d %-5p %m%n</pattern>
	    </encoder>
     </appender>
	<appender name="console-infolog" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
	      <pattern>%d %-5p %m%n</pattern>
	    </encoder>
     </appender>  
     
     <!--로거는 로그를 출력하는 ㅇ소로 Level 속성을 통해서 출력할 로그의 레벨을 조절하여 appender에 전달-->
     <!-- debug레벨의 로그를 출력하는 형식은 console이라는 이름의 appender 사용 -->
     <logger name="board" level="DEBUG" appender-ref="console"/> 
     
     <!--루트로거-->
	  <root level="off">
	    <appender-ref ref="console" />
	  </root>
</configuration>


2. Logback 사용하기

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Controller
public class BoardController {
	
	private Logger log = LoggerFactory.getLogger(this.getClass());
	
	@Autowired
	private BoardService boardService;
	
	@RequestMapping("/board/openBoardList.do")
	public ModelAndView openBoardList() throws Exception{
		
		log.debug("**** openBoardList ");
		
		ModelAndView mv = new ModelAndView("board/boardList"); ///resources/templates 아래
		
		List<BoardDto> list = boardService.selectBoardList();
		mv.addObject("list", list);
		return mv;
	}
   }

 - 롬복으로 사용시에는 @Slf4j 사용하면 로거 따로 생성 필요없다.

import lombok.extern.slf4j.Slf4j;

@Slf4j
@Service
public class BoardServiceImpl implements BoardService{
	
	@Autowired
	private BoardMapper boardMapper;

	@Override
	public List<BoardDto> selectBoardList() throws Exception {
		log.debug("*** BoardServiceImpl ", boardMapper);
		return boardMapper.selectBoardList();
	}
 }