[MyBatis/JAVA/Spring/Maven] log4를 사용하여 SQL로그 출력하기
@욕심쟁이
·2021. 1. 26. 02:12
반응형
1. 의존성 추가(pom.xml) : 보통 기본설정으로 다들어가있음
<!-- https://mvnrepository.com/artifact/org.bgee.log4jdbc-log4j2/log4jdbc-log4j2-jdbc4 -->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
2. 데이터베이스 접속 설정 수정(root-context.xml or dataSource-context.xml)
- com.mysql.cj.jdbc.Driver를 net.sf.log4jdbc.sql.jdbcapi.DriverSpy으로 수정
- jdbc:mysql : 주소에 jdbc:log4jdbc:mysql:주소 log4jdbc추가
- jdbc:oracle: 주소에 jdbc:log4jdbc:oracle:주소 log4jdbc추가
- jdbc:sqlserver: 주소에 jdbc:log4jdbc:sqlserver:주소 log4jdbc추가
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<!-- <property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
<property name="url" value="jdbc:mysql://127.0.0.1:3306/mess?allowPublicKeyRetrieval=true&useSSL=false&serverTimezone=UTC" /> -->
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="url" value="jdbc:log4jdbc:mysql:주소" />
<property name="username" value="username"></property>
<property name="password" value="password"></property>
</bean>
3. properties 파일 신규 생성(log4jdbc.log4j2.properties)
- log4jdbc.log4j2.properties 를 생성
- 위치는 log4j.xml이 있는 /src/main/resources에 생성
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
4. log4j.xml 수정(log4j.xml)
- log4j.xml에 아래코드 추가(어떤 로그를 출력할지)
- sql logger추가
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> -->
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.Travel.go">
<level value="info" />
</logger>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="info" />
</logger>
<!-- SQL Logger -->
<logger name="jdbc.sqltiming" additivity="false">
<level value="warn" />
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.sqlonly" additivity="false">
<level value="info"/>
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.audit" additivity="false">
<level value="warn"/>
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.resultset" additivity="false">
<level value="warn" />
<appender-ref ref="console"/>
</logger>
<logger name="jdbc.resultsettable" additivity="false">
<level value="info"/>
<appender-ref ref="console"/>
</logger>
<!-- Root Logger -->
<root>
<priority value="INFO" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
5. 결과
#로그 레벨 정리
- 로그 레벨은 다음과 같다. (FATAL > ERROR > WARN > INFO > DEBUG > TRACE)
레벨 | 정의 |
---|---|
FATAL | 심각한 문제를 일으킬 수 있는 문제를 출력 (일반적으로는 어플리케이션에서는 사용할 일이 없음) |
ERROR | 요청을 처리하는중 문제가 발생한 상태를 출력 => 일반적인 에러로 처리가 반드시 필요하는 문제를 출력 |
WARN | 경고성 메세지로, 처리 가능한 문제이지만, 향후 시스템 에러의 원인이 될 수 있는 메세지를 출력 |
INFO | 로그인, 상태변경과 같은 정보성 데이터를 출력 |
DEBUG | debug을 위한 용도로, 일반 정보를 상세하게 출력 => 개발시 디버그 용도로 사용한 메시지를 나타냄. |
TRACE | 디버그 레벨이 너무 광범위한 것을 해결하기 위해서 좀더 상세한 상태를 출력 |
=> 기본적으로 rootlogger의 레벨이 'WARN'으로 설정되어 있습니다.
레벨을 'WARN' 으로 설정하면 그 이전 레벨('DEBUG','INFO') 등을 출력하지 않습니다.
#로그 이름 정리
이름 | 정의 |
---|---|
jdbc.sqlonly | SQL 쿼리 문장만 로그로 남김 PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여짐 |
jdbc.sqltiming | SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함 |
jdbc.audit | ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않음 |
jdbc.resultset | ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성 |
jdbc.resultsettable | SQL 결과 조회된 데이터의 table을 로그로 남김 |
반응형
'IT > etc' 카테고리의 다른 글
[JSTL] JSTL에서 varStatus 이용하여 인덱스번호 출력(페이징처리) (0) | 2021.02.08 |
---|---|
[ETC] Spring Controller에서 자바스크립트 경고창 띄우는 방법 (0) | 2021.01.27 |
[GIT] ignore 파일이 적용 안될때 설정 (0) | 2021.01.24 |
[ETC]WAR파일 만들기(export/import) (0) | 2020.09.17 |
자바8 api URL (0) | 2020.07.14 |