log4j2 에서 log4jdbc-remix 도입시 오류가 납니다.
- 작성자 :
- 양*승
- 작성일 :
- 2018-06-05 10:57:46
- 조회수 :
- 9,212
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
안녕하세요
전자정부 프레임워크 3.7 버전을 사용하고 있습니다.
로깅에서 쿼리부분의 파라메터가 ? 로 나와서 log4jdbc-remix을 도입해서 줄바꿈과 파라메터 값이 나오게 변경하려고 하는데요.
도입하려고 하니 오류가 발생합니다.
전자정부 프레임워크 qna에서 log4jdbc-remix 도입 관련된 url을 답변준 게시글이 있어서 해당 url의 정보대로 도입을 했는데요.
http://suyou.tistory.com/76
----------------------------- 적용 내용---------------------------------------
우선 pom.xml 에 추가
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
context-datasource.xml에서 오라클인 경우
<!-- Oracle -->
<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.DriverClassName}"/>
<property name="url" value="${Globals.Url}" />
<property name="username" value="${Globals.UserName}"/>
<property name="password" value="${Globals.Password}"/>
</bean>
<bean id="dataSource-oracle" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL:::" />
</bean>
</property>
</bean>
출처: http://suyou.tistory.com/76 [수유산장]
----------------------------- 적용 내용 끝 ---------------------------------------
오류 내역은 아래처럼 뜨는데 제가 봤을때는
net.sf.log4jdbc.tools.Log4JdbcCustomFormatter 이런 부분에서 찾지 못해서 나온 오류 같습니다.
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource-oracle' defined in file [C:\eGovFrameDev-3.7.0-64bit\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gg.bcms\WEB-INF\classes\egovframework\spring\com\context-datasource.xml]: Error setting property values;
Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Property 'logFormatter' threw exception; nested exception is java.lang.NoSuchMethodError: net.sf.log4jdbc.SpyLogFactory.setSpyLogDelegator(Lnet/sf/log4jdbc/SpyLogDelegator;)V
메이븐 통해서 update를 여러번 해보고, C:\Users\사용자\.m2\repository 에 있는 파일을 지우고 다시 받고 해도 같은 오류가 발생합니다.
어떻게 해야할까요??
전자정부 프레임워크 3.7 버전을 사용하고 있습니다.
로깅에서 쿼리부분의 파라메터가 ? 로 나와서 log4jdbc-remix을 도입해서 줄바꿈과 파라메터 값이 나오게 변경하려고 하는데요.
도입하려고 하니 오류가 발생합니다.
전자정부 프레임워크 qna에서 log4jdbc-remix 도입 관련된 url을 답변준 게시글이 있어서 해당 url의 정보대로 도입을 했는데요.
http://suyou.tistory.com/76
----------------------------- 적용 내용---------------------------------------
우선 pom.xml 에 추가
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.4</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
context-datasource.xml에서 오라클인 경우
<!-- Oracle -->
<bean id="dataSourceSpied" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.DriverClassName}"/>
<property name="url" value="${Globals.Url}" />
<property name="username" value="${Globals.UserName}"/>
<property name="password" value="${Globals.Password}"/>
</bean>
<bean id="dataSource-oracle" class="net.sf.log4jdbc.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSourceSpied" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter">
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL:::" />
</bean>
</property>
</bean>
출처: http://suyou.tistory.com/76 [수유산장]
----------------------------- 적용 내용 끝 ---------------------------------------
오류 내역은 아래처럼 뜨는데 제가 봤을때는
net.sf.log4jdbc.tools.Log4JdbcCustomFormatter 이런 부분에서 찾지 못해서 나온 오류 같습니다.
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource-oracle' defined in file [C:\eGovFrameDev-3.7.0-64bit\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\gg.bcms\WEB-INF\classes\egovframework\spring\com\context-datasource.xml]: Error setting property values;
Caused by: org.springframework.beans.PropertyBatchUpdateException: Failed properties: Property 'logFormatter' threw exception; nested exception is java.lang.NoSuchMethodError: net.sf.log4jdbc.SpyLogFactory.setSpyLogDelegator(Lnet/sf/log4jdbc/SpyLogDelegator;)V
메이븐 통해서 update를 여러번 해보고, C:\Users\사용자\.m2\repository 에 있는 파일을 지우고 다시 받고 해도 같은 오류가 발생합니다.
어떻게 해야할까요??
A
안녕하십니까, 표준프레임워크센터입니다.
파일 내 정의된 property values 설정이 정확하지 않아서 발생한 에러로 보여집니다.
표준프레임워크 3.7(공통컴포넌트 기준)에서 설정을 안내드리겠습니다.
context-datasource.xml에서 아래와 같이 설정해보시기 바랍니다.
<bean id="egov.dataSource" class="net.sf.log4jdbc.remix.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSource" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.remix.tools.Log4JdbcCustomFormatter">
<property name="margin" value="18"/>
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL:::::::"/>
</bean>
</property>
</bean>
<beans profile="oracle">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.oracle.DriverClassName}"/>
<property name="url" value="${Globals.oracle.Url}" />
<property name="username" value="${Globals.oracle.UserName}"/>
<property name="password" value="${Globals.oracle.Password}"/>
</bean>
</beans>
그리고 context-datasource.xml에서
<bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/egovframework/egovProps/globals.properties</value>
<!-- value>file:/product/jeus/egovProps/globals.properties</value-->
</list>
</property>
</bean>
아래와 같은 사항이 확인 가능하실 겁니다.
해당 globals.properties에서 Globals.DbTyped의 oracle 설정이 되어 있는지와
Globals.oracle.* 들의 설정이 맞는지도 확인 부탁드립니다.
또한 maven으로 인한 NoSuchMethodError의 경우는
pom.xml Dependency Hierachy애서
egovframework.rte.fdl.cmmn > egovframework.rte.fdl.logging 하위에
slf4j-api의 1.7.25 버전과 우측 Resolved Dependencies의 slf4j-api 버전이
충돌하지 않는지 확인하시기 바랍니다.
pom.xml의 선언된 slf4j-api 버전을 봤을 때 버전을 1.7.25로 변경 하고,
maven>user settings 에서 repository에 실 위치를 파악하신 후
실제 폴더에서 리파지토리를 삭제 후 maven updat(forced) > maven clean > maven install > Run On Server를 기동하시는
방법을 순차적으로 실행해보시기 바랍니다.
감사합니다.
파일 내 정의된 property values 설정이 정확하지 않아서 발생한 에러로 보여집니다.
표준프레임워크 3.7(공통컴포넌트 기준)에서 설정을 안내드리겠습니다.
context-datasource.xml에서 아래와 같이 설정해보시기 바랍니다.
<bean id="egov.dataSource" class="net.sf.log4jdbc.remix.Log4jdbcProxyDataSource">
<constructor-arg ref="dataSource" />
<property name="logFormatter">
<bean class="net.sf.log4jdbc.remix.tools.Log4JdbcCustomFormatter">
<property name="margin" value="18"/>
<property name="loggingType" value="MULTI_LINE" />
<property name="sqlPrefix" value="SQL:::::::"/>
</bean>
</property>
</bean>
<beans profile="oracle">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${Globals.oracle.DriverClassName}"/>
<property name="url" value="${Globals.oracle.Url}" />
<property name="username" value="${Globals.oracle.UserName}"/>
<property name="password" value="${Globals.oracle.Password}"/>
</bean>
</beans>
그리고 context-datasource.xml에서
<bean id="egov.propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:/egovframework/egovProps/globals.properties</value>
<!-- value>file:/product/jeus/egovProps/globals.properties</value-->
</list>
</property>
</bean>
아래와 같은 사항이 확인 가능하실 겁니다.
해당 globals.properties에서 Globals.DbTyped의 oracle 설정이 되어 있는지와
Globals.oracle.* 들의 설정이 맞는지도 확인 부탁드립니다.
또한 maven으로 인한 NoSuchMethodError의 경우는
pom.xml Dependency Hierachy애서
egovframework.rte.fdl.cmmn > egovframework.rte.fdl.logging 하위에
slf4j-api의 1.7.25 버전과 우측 Resolved Dependencies의 slf4j-api 버전이
충돌하지 않는지 확인하시기 바랍니다.
pom.xml의 선언된 slf4j-api 버전을 봤을 때 버전을 1.7.25로 변경 하고,
maven>user settings 에서 repository에 실 위치를 파악하신 후
실제 폴더에서 리파지토리를 삭제 후 maven updat(forced) > maven clean > maven install > Run On Server를 기동하시는
방법을 순차적으로 실행해보시기 바랍니다.
감사합니다.