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 |
|----------|------|---------|--------|--------------------|-----------|