当前位置: 首页 > 面试题库 >

log4j2 JDBC Appender问题:无法插入记录

刘阳舒
2023-03-14
问题内容

我创建了一个JDBC附加程序,并绑定了ColumnConfig和DataSourceConnectionSource。

尝试在数据库中插入记录时(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>


 类似资料:
  • 问题内容: 我尝试将序列.nextval作为主键插入表中,Java中的sql是 但是,错误是 其他所有字段都是正确的,我认为这是顺序问题,这是正确的吗? 问题答案: 问题在于第一列是数字数据类型,但是您准备的语句正在提交字符串/ VARCHAR数据类型。该语句按原样运行,Oracle没有机会转换对nextval的使用来获取序列值。 这是通过Java的PreparedStatement语法的替代方法

  • 问题内容: 我尝试多次插入但它给我错误 -http://pastie.org/7337421 我究竟做错了什么 ? 问题答案: 您可以尝试以下方法:

  • 问题内容: 我正在尝试将数据从此链接插入到我的SQL Server https://www.ian.com/affiliatecenter/include/V2/CityCoordinatesList.zip 我创建了表 我正在运行以下脚本来进行批量插入 但是批量插入失败,并出现以下错误 当我使用google时,我发现了几篇文章,指出问题可能出在RowTerminator上,但我尝试了诸如/ n

  • 我现在花了大约一个小时试图解决这个问题,但失败了。我已经阅读了几个相关问题,比如这个,GitHub问题,比如这个,但找不到如何最好地解决这个问题。 导致错误的步骤 < li> 错误消息: AttributeError:“InputHookManager”对象没有属性“_stdin_file” 编辑 按如下方式导入会引发相同的错误(请参阅下面我的系统和失败尝试的详细信息): 失败的尝试 然后,我打开

  • 我正在使用以下命令将数据从mysql表提取到hive表: 我在执行上述操作时遇到以下错误: 从数据库读取时出错: java.sql.SQL异常: 流式处理结果集com.mysql.jdbc.RowDataDynamic@1f16ebd3仍处于活动状态。当任何流式处理结果集处于打开状态并在给定连接上使用时,不得发出任何语句。在尝试更多查询之前,请确保已对任何活动的流式处理结果集调用了 .close(

  • 我有一个克隆项目的问题: 无法传输工件org.springframework.boot:sping-boot-maven-plugin:pom:2.1.7。从/到中心(https://repo.maven.apache.org/maven2)释放:https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-ma