목차

Spring Boot; Logback, Log4JDBC 개요

🗓️

Logback

  • Log4j : 자바의 예외를 처리하기 위해 시작된 프로젝트 (종료)
  • fork → Logback
  • slf4j(Simple Logging Facade for Java) 와 함께 사용함
  • slf4j : 로깅 모듈 Interface
  • slf4j를 이용해 코드를 작성하고 내부적으로 Logback, log4j2로 작동

Logback 설정

<?xml version="1.0" encoding="UTF-8" ?>
<configuration debug="true">
  <!-- Appenders -->
  <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <Pattern>%d %5p [%c] %m%n</Pattern>
    </encoder>
  </appender>

  <appender name="console-infolog" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <Pattern>%d %5p %m%n</Pattern>
    </encoder>
  </appender>

  <!-- Logger -->
  <logger name="board" level="DEBUG" appender-ref="console"/>

  <!-- Root logger -->
  <root level="off">
    <appender-ref ref="console"/>
    <appender-ref ref="console-info"/>

  </root>
</configuration>
  • appender : 로그를 출력할 타겟을 결정함 (console, file, db)
  • encoder : appender에 포함되어 출력할 로그를 지정한 형식으로 변환하는 역할.
  • logger : 로그를 출력하는 요소, level속성을 통해 출력할 로그의 레벨을 조절해 appender에 전달한다.

Log level

  • trace : 모든 로그 출력
  • debug : 개발용 디버깅 용도 (좀 더 찾아봐될듯)
  • info : 상태 변경과 같은 정보성 메시지
  • warn : 실행에 문제가 없지만 다른 에러의 원인이 될 수 있는 경고성 메시지
  • error : 실행 중 발생한 문제의 메시지

예를 들어 info로 설정하면 info, warn, error 3가지 모두 출력된다.

Logback의 사용

// controller
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
//...
@Controller
public class BoardController {
    private Logger log = LoggerFactory.getLogger(this.getClass());
//...
    @RequestMapping("/board/openBoardList.do")
    public ModelAndView openBoardList() throws Exception {
        log.debug("openBoardList");

Log4JDBC 쿼리 로그

//build.gradle
    compile group: 'org.bgee.log4jdbc-log4j2', name: 'log4jdbc-log4j2-jdbc4.1',
            version: '1.16'

dependencies에 추가.

//log4jdbc.log4j2.properties
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelentgh=0
// application.properties
#spring.datasource.hikari.jdbc-url=jdbc:h2:tcp://localhost/~/Development/h2/test
spring.datasource.hikari.jdbc-url=jdbc:log4jdbc:h2:tcp://localhost/~/Development/h2/test
#spring.datasource.hikari.driver-class-name=org.h2.Driver
spring.datasource.hikari.driver-class-name=net.sf.log4jdbc.sql.jdbcapi.DriverSpy

jdbc 바인딩 사이에 log4jdbc를 끼워준다.

  • 여기까지하면 조회시 콘솔에 다음과 같이 출력된다
2021-03-04 01:34:48,605  INFO [jdbc.resultsettable] 
|----------|------|---------|--------|--------------------|-----------|
|board_idx |title |contents |hit_cnt |created_datetime    |creator_id |
|----------|------|---------|--------|--------------------|-----------|
|7         |rger  |[unread] |10      |2021-02-26 12-24-13 |admin      |
|----------|------|---------|--------|--------------------|-----------|

2021-03-04 01:34:48,605  INFO 
|----------|------|---------|--------|--------------------|-----------|
|board_idx |title |contents |hit_cnt |created_datetime    |creator_id |
|----------|------|---------|--------|--------------------|-----------|
|7         |rger  |[unread] |10      |2021-02-26 12-24-13 |admin      |
|----------|------|---------|--------|--------------------|-----------|

그 외 참고자료