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)

Reply via email to