오류
일반적인 디버깅 중 Java 오류인 java.lang.RuntimeException: Driver com.tmax.tibero.jdbc.TbDriver claim to not accept jdbcUrl, jdbc:log4jdbc:tibero:thin:@localhost:8629:tibero가 발생했습니다.
이러한 오류는 일반적으로 JDBC 드라이버와 제공된 JDBC URL 간에 호환성 문제가 있을 때 발생합니다.
Step 1: Updating Dependencies
해결 방법의 첫 번째 단계는 종속성을 업데이트하는 것이었습니다. 프로젝트의 pom.xml 파일에서 종속성이 업데이트되었습니다.
log4jdbc-log4j2 종속성뿐만 아니라 'egovframework'에서 제공하는 로깅 및 XML 처리와 관련된 종속성을 추가했습니다. 이러한 종속성을 추가하는 동안 충돌을 피하기 위해 'egovframework'의 기존 log4j, log4jdbc3 및 slf4j-log4j12 종속성이 제외되었는지 확인했습니다.
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.logging</artifactId>
<version>${egovframework.rte.version}</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>net.sf</groupId>
<artifactId>log4jdbc3</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.xml</artifactId>
<version>${egovframework.rte.version}</version>
<exclusions>
<exclusion>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-terracotta</artifactId>
</exclusion>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
<exclusion>
<groupId>net.sf</groupId>
<artifactId>log4jdbc3</artifactId>
</exclusion>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>1.16</version>
</dependency>
Step 2: log4jdbc.log4j2.properties 추가
다음으로 resources 디렉터리 아래에 log4jdbc.log4j2.properties라는 새 파일을 만들었습니다. 이 파일은 스파이 로그 위임자를 설정하고 SQL 쿼리 덤프를 위한 최대 줄 길이를 구성하는 데 필요했습니다.
Step 3: Updating VM arguments
다음 단계는 VM 인수를 업데이트하는 것이었습니다. 이는 서버의 시작 구성 설정으로 이동하여 -Dlog4jdbc.drivers=com.tmax.tibero.jdbc.TbDriver 인수를 추가하여 수행되었습니다. 이를 통해 JDBC 작업 로깅에 사용할 드라이버를 지정합니다.
Step 4: log4j2.xml 수정
마지막 단계는 log4j2.xml 파일을 일부 변경하는 것입니다. 특정 JDBC 작업에 대해 수준이 "OFF"로 설정된 여러 로거 구성을 추가했습니다. 이는 로그의 노이즈를 줄이고 로깅 프로세스를 간소화하는 데 도움이 되었습니다.
<Logger name="jdbc" level="OFF"/>
<Logger name="jdbc.sqlonly" level="OFF"/>
<Logger name="jdbc.audit" level="OFF"/>
<Logger name="jdbc.resultset" level="OFF"/>
<Logger name="jdbc.resultsettable" level="OFF"/>
<Logger name="jdbc.connection" level="OFF"/>
이러한 각 줄은 JDBC 로깅의 다른 측면을 비활성화합니다. 분석해 보겠습니다.
- <Logger name="jdbc" level="OFF"/>는 일반 JDBC 로그를 끕니다. 이들은 일반적으로 저수준이며 대부분의 개발자에게 그다지 유익하지 않습니다.
- <Logger name="jdbc.sqlonly" level="OFF"/>는 SQL 쿼리 로깅을 비활성화합니다. 때로는 유용하지만 로그에 정보가 넘치게 되어 실제 문제를 파악하기가 더 어려워질 수 있습니다.
- <Logger name="jdbc.audit" level="OFF"/> 및 <Logger name="jdbc.resultset" level="OFF"/>는 감사 정보 및 쿼리 결과에 대한 로깅을 끕니다. 이들은 종종 일반 작동에 필요하지 않으며 안전하게 끌 수 있습니다.
- <Logger name="jdbc.resultsettable" level="OFF"/>는 SQL 쿼리 실행으로 인한 테이블 로깅을 비활성화합니다.
- 마지막으로 <Logger name="jdbc.connection" level="OFF"/>는 JDBC 연결 수명 주기 이벤트의 로깅을 끕니다.
이러한 다양한 로거에 대해 로그 수준을 '끄기'로 설정하면 로그의 '노이즈'를 크게 줄여 실제 문제를 더 쉽게 식별하고 해결할 수 있습니다. 로깅에 대한 이 세분화된 제어는 Log4J2 시스템의 강점 중 하나이며, 로깅되는 항목과 시기를 정확하게 사용자 정의할 수 있습니다.
이러한 조정 후에 우리는 더 깨끗하고 능률적인 로깅 프로세스를 갖게 되어 중요한 문제에 더 쉽게 집중할 수 있게 되었습니다. 그리고 중요한 것은 이 여정에서 우리를 시작한 java.lang.RuntimeException이 더 이상 표시되지 않는다는 것입니다.
결과
변경 후 처음에 직면했던 런타임 예외를 성공적으로 처리할 수 있었습니다. JDBC 드라이버는 이제 JDBC URL을 접근할 수 있었고 런타임 오류를 성공적으로 해결했습니다.
'eclipse' 카테고리의 다른 글
이클립스 속도 향상을 위한 필수 팁 5가지 (0) | 2024.12.03 |
---|---|
[2023] CamelCase 변환을 위한 Eclipse 플러그인 사용법 (0) | 2023.08.04 |
SVN에서 특정 디렉토리 무시하기: target 폴더 예제 (0) | 2023.07.15 |