[ 
https://issues.apache.org/jira/browse/LOG4J2-2667?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17023622#comment-17023622
 ] 

Gary D. Gregory commented on LOG4J2-2667:
-----------------------------------------

If you are getting the same exception out of the JDBC driver, then this still 
looks to me like a bug in that JDBC driver. If I were you I'd create the 
simplest JDBC test only using the JDBC driver and submit it as a bug to SQLite.

 

> "Values not bound to statement" when using JDBC appender, appender does not 
> respect bufferSize="0".
> ---------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-2667
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2667
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders, Core
>    Affects Versions: 2.11.2, 2.12.0
>         Environment: Oracle Java 11.0.3, Windows Server 2016, Spring Boot 
> 2.1.6
>            Reporter: Edith Chui
>            Assignee: Gary D. Gregory
>            Priority: Major
>             Fix For: 3.0.0, 2.13.1
>
>         Attachments: log4j2.issue.zip
>
>
>  
> Since version 2.11.2, the log4j2 library was unable to log message on 
> database via JDBC connection. When using 2.11.1, no such problem was found. 
> root cause: 
> In org.sqlite.core.CorePreparedStatement, below function was called, but 
> paramValid local variable is not initialized. Value of 
> "paramValid.cardinality()" is always 0 which does not match with the total 
> number of parameter.
>  
> {code:java}
> protected void checkParameters() throws SQLException
> { 
>   if (paramValid.cardinality() != paramCount) 
>     throw new SQLException("Values not bound to statement"); 
> }
> {code}
>  
> Sample appender in log4j2.xml
> {code:java}
> <JDBC name="jdbcAppender" tableName="LOG_TABLE" bufferSize="0">
>   <ConnectionFactory class="MY.SQLiteConnectionFactory" 
> method="getDatabaseConnection" />
>   <ColumnMapping name="FIELD1" type="java.lang.Integer" pattern="%X{FIELD1}" 
> />
>   <ColumnMapping name="FIELD2" type="java.lang.String" pattern="%X{FIELD2}" />
>   <ColumnMapping name="FIELD3" type="java.lang.String" pattern="%X{FIELD3}" />
>   <ColumnMapping name="FIELD4" type="java.sql.Types.TIMESTAMP" 
> pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}" />
> </JDBC>{code}
>  
> {panel:title=Exception Log}
> 2019-08-02 15:57:45,483 main ERROR An exception occurred processing Appender 
> jdbcAppender 
> org.apache.logging.log4j.core.appender.db.DbAppenderLoggingException: Failed 
> to commit transaction logging event or flushing buffer.
>  at 
> org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:552)
>  at 
> org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeThrough(JdbcDatabaseManager.java:867)
>  at 
> org.apache.logging.log4j.core.appender.db.AbstractDatabaseManager.write(AbstractDatabaseManager.java:264)
>  at 
> org.apache.logging.log4j.core.appender.db.AbstractDatabaseAppender.append(AbstractDatabaseAppender.java:110)
>  at 
> org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:156)
>  at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:129)
>  at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:120)
>  at 
> org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:84)
>  at 
> org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:464)
>  at 
> org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:448)
>  at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:431)
>  at 
> org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406)
>  at 
> org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
>  at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
>  at 
> org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2170)
>  at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2125)
>  at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108)
>  at 
> org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2007)
>  at 
> org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1866)
>  at org.apache.logging.slf4j.Log4jLogger.info(Log4jLogger.java:179)
>  ...
>  Caused by: java.sql.SQLException: Values not bound to statement
>  at 
> org.sqlite.core.CorePreparedStatement.checkParameters(CorePreparedStatement.java:71)
>  at 
> org.sqlite.core.CorePreparedStatement.executeBatch(CorePreparedStatement.java:83)
>  at 
> org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.commitAndClose(JdbcDatabaseManager.java:545)
>  ...
> {panel}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to