log4j2에서 JDBCAppender 오류
- 작성자 :
- 정*은
- 작성일 :
- 2020-12-09 17:29:13
- 조회수 :
- 4,699
- 구분 :
- 실행환경
- 진행상태 :
- 완료
Q
안녕하세요?
egov 3.7.0 버전, db는 오라클을 사용중이고, 로그를 db에 저장하기 위해 JDBCAppender 를 사용하려고 하려고 합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:logging:log4j_2:%EC%84%A4%EC%A0%95_%ED%8C%8C%EC%9D%BC%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94_%EB%B0%A9%EB%B2%95
위 사이트를 참고하여 LOG_TEST 테이블 생성 후, log4j2.xml 파일을 다음과 같이 수정하였습니다.
--------------------------------------------------------------------------------------------------------------------------------------
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
<JDBC name="databaseAppender" tableName="LOG_TEST">
<ConnectionFactory class="egovframework.rte.fdl.logging.db.EgovConnectionFactory" method="getDatabaseConnection" />
<Column name="EVENT_DATE" isEventTimestamp="true" />
<Column name="LOG_LEVEL" pattern="%p" />
<Column name="LOGGER" pattern="%c" />
<Column name="MESSAGE" pattern="%m" />
<Column name="EXCEPTION" pattern="%ex{full}" />
</JDBC>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="console" />
<AppenderRef ref="databaseAppender" />
</Root>
</Loggers>
--------------------------------------------------------------------------------------------------------------------------------------
그리고 context-mapper.xml 파일에 다음 소스를 추가했습니다.
--------------------------------------------------------------------------------------------------------------------------------------
<bean id="egovConnectionFactory" class="egovframework.rte.fdl.logging.db.EgovConnectionFactory">
<property name="dataSource" ref="dataSource" />
</bean>
--------------------------------------------------------------------------------------------------------------------------------------
출력되는 에러 로그는 첨부파일 확인부탁드립니다.
어떤 문제인지 알려주시면 감사하겠습니다.
+ 이전 답변들 검색해보니 <ConnectionFactory> 대신 WAS에서 제공하는 JNDI를 이용하라는 답변이 있는데 다른 방법은 없을까요?
egov 3.7.0 버전, db는 오라클을 사용중이고, 로그를 db에 저장하기 위해 JDBCAppender 를 사용하려고 하려고 합니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte3:fdl:logging:log4j_2:%EC%84%A4%EC%A0%95_%ED%8C%8C%EC%9D%BC%EC%9D%84_%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94_%EB%B0%A9%EB%B2%95
위 사이트를 참고하여 LOG_TEST 테이블 생성 후, log4j2.xml 파일을 다음과 같이 수정하였습니다.
--------------------------------------------------------------------------------------------------------------------------------------
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
<JDBC name="databaseAppender" tableName="LOG_TEST">
<ConnectionFactory class="egovframework.rte.fdl.logging.db.EgovConnectionFactory" method="getDatabaseConnection" />
<Column name="EVENT_DATE" isEventTimestamp="true" />
<Column name="LOG_LEVEL" pattern="%p" />
<Column name="LOGGER" pattern="%c" />
<Column name="MESSAGE" pattern="%m" />
<Column name="EXCEPTION" pattern="%ex{full}" />
</JDBC>
</Appenders>
<Loggers>
<Root level="INFO">
<AppenderRef ref="console" />
<AppenderRef ref="databaseAppender" />
</Root>
</Loggers>
--------------------------------------------------------------------------------------------------------------------------------------
그리고 context-mapper.xml 파일에 다음 소스를 추가했습니다.
--------------------------------------------------------------------------------------------------------------------------------------
<bean id="egovConnectionFactory" class="egovframework.rte.fdl.logging.db.EgovConnectionFactory">
<property name="dataSource" ref="dataSource" />
</bean>
--------------------------------------------------------------------------------------------------------------------------------------
출력되는 에러 로그는 첨부파일 확인부탁드립니다.
어떤 문제인지 알려주시면 감사하겠습니다.
+ 이전 답변들 검색해보니 <ConnectionFactory> 대신 WAS에서 제공하는 JNDI를 이용하라는 답변이 있는데 다른 방법은 없을까요?
A
안녕하세요.
표준프레임워크센터 입니다.
ConnectionFactory가 제공하는 속성이
method라는 속성밖에 제공되지 않아
datasource를 전달받을때 제한일 발생될수 있을듯 합니다.
ConnectionFactory클래스를
커스텀으로 생성하여
생성자 메소드에서 datasource를 전달받도록 구현하는 방법도 있습니다.
그리고
언급하신 JNDI방식도 가능한데요.
다음과 같은 형식으로 지정이 가능합니다.
<DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
다음 apache 재단 문서를
참고하실수 있습니다.
https://logging.apache.org/log4j/2.x/manual/appenders.html
감사합니다.
표준프레임워크센터 입니다.
ConnectionFactory가 제공하는 속성이
method라는 속성밖에 제공되지 않아
datasource를 전달받을때 제한일 발생될수 있을듯 합니다.
ConnectionFactory클래스를
커스텀으로 생성하여
생성자 메소드에서 datasource를 전달받도록 구현하는 방법도 있습니다.
그리고
언급하신 JNDI방식도 가능한데요.
다음과 같은 형식으로 지정이 가능합니다.
<DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
다음 apache 재단 문서를
참고하실수 있습니다.
https://logging.apache.org/log4j/2.x/manual/appenders.html
감사합니다.