일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- MSSQL
- 오픈소스
- Core Java
- JDBC
- IntelliJ
- ubuntu
- Python
- Exception
- PostgreSQL
- Source
- Docker
- error
- Spring Boot
- Tomcat
- 설정
- STS
- AJAX
- myBatis
- 문서
- JavaScript
- Thymeleaf
- maven
- jpa
- spring
- git
- MySQL
- SpringBoot
- Eclipse
- Open Source
- oracle
- Today
- Total
헤르메스 LIFE
[Spring] log4jdbc-remix 를 이용한 쿼리 로그 출력하기 본문
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
log4jdbc-remix는 2013-11-06일 개발중지되었습니다.
(https://code.google.com/archive/p/log4jdbc-remix/).
그래서, log4jdbc-remix와 log4jdbc의 다른 분기(fork)인 log4jdbc-log4j2를 사용하라고 하네요. ( 이게 최신입니다. )
(https://code.google.com/p/log4jdbc-log4j2/)
jdbc.properties
MySQL.DriverClassName = com.mysql.jdbc.Driver MySQL.url = jdbc:mysql://localhost:3306/spring?useUnicode=yes&characterEncoding=UTF8&autoReconnect=true&autoReconnectForPools=true MySQL.UserName = spring MySQL.Password = spring |
<bean id="jdbcProp" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>
<!-- oracle -->
<bean id="dataSourceOracle" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceOracleSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<!-- <property name="margin" value="8" /> -->
<property name="sqlPrefix" value="SQL:" />
</bean>
</property>
</bean>
<bean id="dataSourceOracleSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Oracle.DriverClassName}"/>
<property name="url" value="${Oracle.Url}" />
<property name="username" value="${Oracle.UserName}"/>
<property name="password" value="${Oracle.Password}"/>
</bean>
<!-- mysql -->
<bean id="dataSourceMysql" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceMySqlSpied" />
<property name="logFormatter">
<bean class="com.tistory.pentode.log.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<!-- <property name="margin" value="8" /> -->
<property name="sqlPrefix" value="SQL:" />
</bean>
</property>
<bean>
<bean id="dataSourceMySqlSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${MySQL.DriverClassName}"/>
<property name="url" value="${MySQL.Url}" />
<property name="username" value="${MySQL.UserName}"/>
<property name="password" value="${MySQL.Password}"/>
</bean>
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
</Appenders>
<Loggers>
<Logger name="java.sql" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="egovframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="org.springframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="jdbc.resultsettable" additivity="false">
<level value="info" />
<appender-ref ref="console-log4jdbc" />
</Logger>
</Loggers>
</Configuration>
jdbc.sqlonly : SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. jdbc.sqltiming : SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. jdbc.audit : ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. jdbc.resultset : ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. jdbc.resultsettable : SQL 결과 조회된 데이터의 table을 로그로 남긴다. jdbc.connection : 열려있는 모든 번호와 연결 수립 및 해제 이벤트를 기록. 이는 연결 문제를 찾아내는데 매우 유용 (Connection Pool 설정) |
출처 : junshock5.tistory.com/124
- slf4j
- Logger 추상체로 slf4j는 logback이나 log4j2와 같은 프레임워크의 인터페이스의 역할을 해주기 때문에 로깅 구현체가 바뀌더라도 생각보다 어렵지않게 변경할 수 있습니다. 기능이 너무 단순하여 실제로는 사용할 필요가 없긴합니다.
- Log4j Logback Log4j2 순서로 등장했습니다.
- log4j
- 콘솔로 출력하는 stdout 외에도 파일 출력도 제공합니다.
하지만 2015년에 개발이 중단되었기 때문에 기존 시스템이 아니라면 사용할 이유가 없습니다.
- 콘솔로 출력하는 stdout 외에도 파일 출력도 제공합니다.
- logback
- log4j2 전에 개발된 로깅프로그램으로 log4j에서 향상된 성능과 필터링 옵션을 제공합니다.
slf4j도 지원합니다. 그리고 자동 리로드도 가능합니다.
- log4j2 전에 개발된 로깅프로그램으로 log4j에서 향상된 성능과 필터링 옵션을 제공합니다.
- log4j2
- logback과 동일하게 자동 리로드 기능과 필터리 기능을 제공합니다. logback과 차이점은 Apache에 따르면 멀티 쓰레드 환경에서 비동기 로거(Async Logger)의 경우 Log4j 1.x 및 Logback보다 처리량이 18배 더 높고 대기 시간이 훨씬 더 짧다. 아래 그래프에서 성능 차이를 확인 해볼수 있다. 그리고 람다 표현식과 사용자 정의 로그 레벨도 지원합니다.
- log4j
'Spring Framework' 카테고리의 다른 글
[SpringBoot] 스프링 부트 스타터 프로젝트 옵션들 (0) | 2021.01.03 |
---|---|
[Spring] Spring + MyBatis 에러처리 (0) | 2020.12.21 |
[전자정부프레임워크] EgovPropertyServiceImpl (0) | 2020.11.12 |
Spring Security on REST API 구축 실패기...!!! (0) | 2016.08.24 |
Spring + JSON 설정 시 유의사항 (0) | 2016.08.16 |