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