2014-06-16 1 views
1

JDBC appender를 만들고 ColumnConfig와 DataSourceConnectionSource를 바인딩했습니다.log4j2 JDBC Appender 문제 : 레코드를 삽입하지 못했습니다.

DB (Logger.debug ("Test"))에 레코드를 삽입하는 동안 예외가 발생합니다.

감사

[6/16/14 18:44:58:647 GMT-08:00] 00000024 SystemErr  R ERROR StatusLogger An exception occurred processing Appender JDBCAppender org.apache.logging.log4j.core.appender.AppenderLoggingException: Failed to insert record for log event in JDBC manager: DSRA1300E: Feature is not implemented: PreparedStatement.setNString 
    at org.apache.logging.log4j.core.appender.db.jdbc.JDBCDatabaseManager.writeInternal(JDBCDatabaseManager.java:117) 
    at org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:159) 
    at org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:103) 
    at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:97) 
    at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:425) 
    at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406) 
    at org.apache.logging.log4j.core.Logger$PrivateConfig.logEvent(Logger.java:275) 
    at org.apache.logging.log4j.core.async.AsyncLogger.actualAsyncLog(AsyncLogger.java:289) 
    at org.apache.logging.log4j.core.async.RingBufferLogEvent.execute(RingBufferLogEvent.java:99) 
    at org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:43) 
    at org.apache.logging.log4j.core.async.RingBufferLogEventHandler.onEvent(RingBufferLogEventHandler.java:28) 
    at com.lmax.disruptor.BatchEventProcessor.run(BatchEventProcessor.java:133) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:897) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:919) 
    at java.lang.Thread.run(Thread.java:736) 
Caused by: java.sql.SQLFeatureNotSupportedException: DSRA1300E: Feature is not implemented: PreparedStatement.setNString 
    at com.ibm.ws.rsadapter.AdapterUtil.notSupportedX(AdapterUtil.java:1306) 
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.setNString(WSJdbcPreparedStatement.java:2362) 
    at org.apache.logging.log4j.core.appender.db.jdbc.JDBCDatabaseManager.writeInternal(JDBCDatabaseManager.java:104) 
    ... 14 more 
Caused by: java.lang.AbstractMethodError: java/sql/PreparedStatement.setNString(ILjava/lang/String;)V 
    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.setNString(WSJdbcPreparedStatement.java:2346) 
    ... 15 more 

답변

4

내 이전의 대답은 사과 잘못되었습니다. 이 동작을 수정할 수 있습니다 by configuration. 기본적으로 모든 열 (isEventTimestamp="true" 인 경우 제외)은 유니 코드 문자열로 취급되며 값은 PreparedStatement.setNString 메서드를 통해 삽입됩니다. 열을 isUnicode="false"으로 구성하면 PreparedStatement.setString을 통해 값이 삽입되므로 제대로 작동합니다. 예제 열 구성 :

+0

심지어 내가 의심 ... 같은 ojdbc6 11.2.0.2 및 ojdbc14 드라이버 버전과 함께 행운을 빕니다. –

+0

나는 그것이 운전자의 문제라고 생각했지만, 문서와 코드를보고 나는 틀렸다는 것을 깨달았다. 나는 내 대답을 수정했다. –

+0

구성 변경으로 문제가 해결 되었습니까? –