Spring boot 에서는 logback-spring.xml 파일에 설정해야함
<!-- DB -->
<springProperty name="driverClass" source="spring.datasource.driver-class-name"/>
<springProperty name="url" source="spring.datasource.url"/>
<springProperty name="user" source="spring.datasource.username"/>
<springProperty name="password" source="spring.datasource.password"/>
<appender name="DB" class="com.test.package.util.logback.LogDBAppender">
<connectionSource class="ch.qos.logback.core.db.DriverManagerConnectionSource">
<driverClass>${driverClass}</driverClass>
<url>${url}</url>
<user>${user}</user>
<password>${password}</password>
</connectionSource>
</appender>
DBAppender는 로그정보를 DB에 insert하는 역할을 한다. Log4j의 JDBCAppender와는 달리 Logback의 DBAppender는 디폴트로 LOGGING_EVENT, LOGGING_EVENT_PROPERTY, LOGGING_EVENT_EXCEPTION의 3가지 테이블을 기본적으로 필요로 한다.
-LOGGING_EVENT 테이블
LOGGING_EVENT 테이블은 로그메시지, timestamp 등 일반적인 로그 이벤트 정보를 저장하는 역할을 하는 테이블
컬럼명 | 타입 | 기능 |
timestmp | big int | 로그 이벤트 발생시점에 대한 타임스탬프 값 |
formatted_message | text | 로깅시점에 전달된 메시지와 파라미터를 이용하여 변환된 메시지 |
logger_name | varchar | 로그를 출력할 당시 사용된 Logger의 name |
level_string | varchar | 로그를 출력할 당시 level |
reference_flag | smallint | reference_flag는 로그 이벤트발생 당시 MDC 혹은 Context 에 저장된 속성이 있어서 LOGGING_EVENT_PROPERTY에 데이터가 저장되는 경우 1의 값을 가지고 로그 이벤트에 Exception 객체에 대한 정보가 있어 LOGGING_EXCEPTION에 저정되어야 할 데이터가 있는 경우 2의 값을 가진다. 두가지 데이터가 모두 있는 경우 3의 값을 가진다. |
caller_filename | varchar | 로그를 호출한 파일명 |
caller_class | varchar | 로그를 호출한 클래스명 |
caller_method | varchar | 로그를 호출한 메소드명 |
caller_line | char | 로그를 호출한 라인번호 |
event_id | int | 로그 이벤트에 따른 DB의 고유한 키 값 |
-LOGGING_EVENT_PROPERTY 테이블
LOGGING_EVENT_PROPERTY 테이블은 로깅 이벤트가 발생했을 때 컨텍스트에 저장된 프로퍼티 정보와 MDC에 저장된 정보를 저장하는 용도로 사용되는 테이블
컬럼명 | 타입 | 기능 |
event_id | int | 로그 이벤트에 따른 DB의 고유한 키 값 |
mapped_key | varchar | MDC 혹은 context에 저장된 키 값 |
mapped_value | text | MDC 혹은 context에 저장된 키에 해당하는 value |
-LOGGING_EXCEPTION 테이블
LOGGING_EXCEPTION 테이블은 로깅이벤트가 발생했을 때, 로그메시지와 함께 파라미터로 Exception 객체를 넘겨주는 경우 Exception 정보를 이용하여 stackTrace 정보를 저장하는 테이블
컬럼명 | 타입 | 기능 |
event_id | int | 로그 이벤트에 따른 DB의 고유한 키 값 |
i | smallint | stack trace에 대한 인덱스 정보 |
trace_line | varchar | 해당 stack trace에 대한 메시지 |
-로그레벨이 ERROR일 경우 해당 로그는 LOGGING_EVENT 테이블에 쌓이게 된다.
log.error("LOGGING_EVENT 테이블 Insert 테스트");
-LOGGING_EVENT_PROPERTY 테이블에 데이터를 쌓는 방법
MDC.clear();
MDC.put("TEST_ID_1", "TEST_VALUE");
log.error("LOGGING_EVENT_PROPERTY 테이블 Insert 테스트", MDC.getCopyOfContextMap());
-LOGGING_EXCEPTION 테이블에 데이터를 쌓는 방법
log.error("LOGGING_EXCEPTION 테이블 Insert 테스트 : {}", new NullPointerException("NullPointerException"));