Hello,

I am using the JDBCAppender:

{
  "type" : "Jdbc",
  "name" : "MyDatabaseAppender",
  "tableName" : "LOGS",
  "ignoreExceptions" : "false",
  "ConnectionFactory" : {
    "class" : "test.ConnectionFactory",
    "method" : "getDatabaseAppenderDataSource"
  },
  "Column" : [
     { "name" : "ID", "pattern" : "%X{ID}", "isUnicode" : "false" },
     { "name" : "NUM", "pattern" : "%X{NUM}", "isUnicode" : "false" }
 ]
}

As you can see, I am using the ThreadContext to pass the variables.

ThreadContext.put("ID", id++);
ThreadContext.put("NUM", "41");

The NUM column is of type BIGINT, and is nullable.

I am trying to set it to NULL with:
  ThreadContext.put("NUM", "NULL");
or
  ThreadContext.put("NUM", null);
or
  ThreadContext.put("NUM", "");

Every time I get
Caused by: org.apache.derby.client.am.SqlException: Error for batch element
#0: Invalid character string format for type BIGINT.
    at org.apache.derby.client.am.Statement.completeExecute(Unknown Source)

I believe this is because, in
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal()
we always do
  this.statement.setString(i++, column.layout.toSerializable(event));

So we always end up feeding the String "" or "NULL" to the statement.

Is there anything I can do to alter this behavior?

Thanks

Reply via email to