Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java log4j2 JDBC追加器问题:插入记录失败_Java_Logging_Jdbc_Log4j_Log4j2 - Fatal编程技术网

Java log4j2 JDBC追加器问题:插入记录失败

Java log4j2 JDBC追加器问题:插入记录失败,java,logging,jdbc,log4j,log4j2,Java,Logging,Jdbc,Log4j,Log4j2,我已经创建了一个JDBC appender并绑定了ColumnConfig和DataSourceConnectionSource 尝试在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.apach

我已经创建了一个JDBC appender并绑定了ColumnConfig和DataSourceConnectionSource

尝试在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

我之前的回答不正确,抱歉。 可以修改此行为。默认情况下,所有列(除非
isEventTimestamp=“true”
)都被视为unicode字符串,并通过
PreparedStatement.setNString
方法插入值。如果使用
isUnicode=“false”
配置列,则会通过
PreparedStatement.setString
插入值,这应该可以工作。列配置示例:

  <Appenders>
    <JDBC name="databaseAppender" tableName="dbo.application_log">
      <DataSource jndiName="java:/comp/env/jdbc/LoggingDataSource" />
      <Column name="eventDate" isEventTimestamp="true" />
      <Column name="level" pattern="%level" isUnicode="false" />
      <Column name="logger" pattern="%logger" isUnicode="false" />
      <Column name="message" pattern="%message" isUnicode="false" />
      <Column name="exception" pattern="%ex{full}" isUnicode="false" />
    </JDBC>
  </Appenders>


就连我也怀疑这一点……我尝试过ojdbc6 11.2.0.2和ojdbc14驱动程序版本,但没有成功。我认为这是驱动程序的问题,但查看文档和代码,我意识到我错了。我修改了我的答案。我有同样的问题,@RemkoPopma-ur-response确实为我解决了问题。谢谢