Grzegorz Grzybek created LOG4J2-3424:
----------------------------------------
Summary: JDBC Appender configuration properties not handled
correctly after upgrading to 2.17.2
Key: LOG4J2-3424
URL: https://issues.apache.org/jira/browse/LOG4J2-3424
Project: Log4j 2
Issue Type: Dependency upgrade
Components: Appenders, Configuration
Affects Versions: 2.17.2
Reporter: Grzegorz Grzybek
I'm a maintainer of Pax Logging project and for long time we had this
configuration in integration tests:
{noformat}
appender.jdbc.type = JDBC
appender.jdbc.name = jdbc
appender.jdbc.tableName = LOG
appender.jdbc.connectionSource.type = DriverManager
appender.jdbc.connectionSource.driverClassName = org.h2.Driver
appender.jdbc.connectionSource.connectionString =
jdbc:h2:tcp://localhost:PORT/logsdb
appender.jdbc.connectionSource.p1.type = property
appender.jdbc.connectionSource.p1.name = SCHEMA
appender.jdbc.connectionSource.p1.value = logs
appender.jdbc.connectionSource.p2.type = property
appender.jdbc.connectionSource.p2.name = QUERY_TIMEOUT
appender.jdbc.connectionSource.p2.value = 5000
appender.jdbc.connectionSource.p3.type = property
appender.jdbc.connectionSource.p3.name = user
appender.jdbc.connectionSource.p3.value = logadmin
appender.jdbc.connectionSource.p4.type = property
appender.jdbc.connectionSource.p4.name = password
appender.jdbc.connectionSource.p4.value = logpassword
appender.jdbc.c1.type = Column
appender.jdbc.c1.name = DATE
appender.jdbc.c1.isEventTimestamp = true
appender.jdbc.c2.type = Column
appender.jdbc.c2.name = LEVEL
appender.jdbc.c2.pattern = %level
appender.jdbc.c2.isUnicode = false
appender.jdbc.c3.type = Column
appender.jdbc.c3.name = SOURCE
appender.jdbc.c3.pattern = %logger
appender.jdbc.c3.isUnicode = false
appender.jdbc.c4.type = Column
appender.jdbc.c4.name = MESSAGE
appender.jdbc.c4.pattern = %message
appender.jdbc.c4.isUnicode = false
rootLogger.level = info
rootLogger.appenderRef.console.ref = console
logger.my.name = my.logger
logger.my.level = trace
logger.my.additivity = false
logger.my.appenderRef.jdbc.ref = jdbc
{noformat}
now the properties are not handled correctly. For example with:
{noformat}
appender.jdbc.connectionSource.p1.type = property
appender.jdbc.connectionSource.p1.name = SCHEMA
appender.jdbc.connectionSource.p1.value = logs
{noformat}
I'm getting (in
{{org.apache.logging.log4j.core.config.plugins.util.PluginBuilder#generateParameters()}}):
{noformat}
createProperty(name="SCHEMA", value="logs", value="null")
{noformat}
call and
{{org.apache.logging.log4j.core.config.Property#createProperty(java.lang.String,
java.lang.String, java.lang.String)}} is called with:
* SCHEMA
* logs
* null
values.
In debug logs there's:
{noformat}
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG : Building
Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG :
createProperty(name="password", value="logpassword", value="null")
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG : Building
Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG :
createProperty(name="SCHEMA", value="logs", value="null")
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG : Building
Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG :
createProperty(name="user", value="logadmin", value="null")
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG : Building
Plugin[name=property, class=org.apache.logging.log4j.core.config.Property].
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG :
createProperty(name="QUERY_TIMEOUT", value="5000", value="null")
org.ops4j.pax.logging.pax-logging-api [log4j2] DEBUG : Building
Plugin[name=connectionSource,
class=org.apache.logging.log4j.core.appender.db.jdbc.DriverManagerConnectionSource].
{noformat}
2.17.2 introduced {{org.apache.logging.log4j.core.config.Property#rawValue}}
and my values are available under {{rawValue}} instead of {{value}} fields of
{{org.apache.logging.log4j.core.config.Property}} objects.
Eventually
{{org.apache.logging.log4j.core.appender.db.jdbc.AbstractDriverManagerConnectionSource#toProperties()}}
takes the {{value}} from {{Property}} and it is null...
--
This message was sent by Atlassian Jira
(v8.20.1#820001)