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

Petar Petrov edited comment on LOG4J2-2757 at 1/14/20 8:34 AM:
---------------------------------------------------------------

It doesn't seem to help. *tableName=${main:1}*
{code:java}
2020-01-14 09:26:56,496 pool-2-thread-3 ERROR Unable to write to database 
[JdbcManager{name=TaskLogJDBC, bufferSize=0, tableName=${main:1}, 
columnConfigs=[{...], columnMappings=[], immediateFail=false, retry=true, 
reconnectIntervalMillis=5000, truncateStrings=true], connection=null, 
statement=null, reconnector=Reconnector 
[latch=java.util.concurrent.CountDownLatch@2d3b2097[Count = 0], 
shutdown=false], isBatchSupported=true, columnMetaData=null]).
        at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:793)
        at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeThrough(JdbcDatabaseManager.java:887)
        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:543)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:460)
        at 
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
        at 
org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2198)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2152)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2135)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2028)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1899)
        at 
org.apache.logging.log4j.spi.AbstractLogger.debug(AbstractLogger.java:453)
        at com.my.app.QueryExecutor.execute(QueryAndroidDeviceExecutor.java:50)
        at com.my.app.TaskExecutor.execute(TaskExecutor.kt:30)
        at com.my.app.TaskExecutor.run(TaskExecutor.kt:57)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at 
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
{code}

Config


{code:xml}
       <JDBC name="TaskLogJDBC"
              tableName="$${main:1}">
{code}




was (Author: ppetrov_mp):
It doesn't seem to help. *tableName=${main:1}*
{code:java}
2020-01-14 09:26:56,496 pool-2-thread-3 ERROR Unable to write to database 
[JdbcManager{name=TaskLogJDBC, bufferSize=0, tableName=${main:1}, 
columnConfigs=[{...], columnMappings=[], immediateFail=false, retry=true, 
reconnectIntervalMillis=5000, truncateStrings=true], connection=null, 
statement=null, reconnector=Reconnector 
[latch=java.util.concurrent.CountDownLatch@2d3b2097[Count = 0], 
shutdown=false], isBatchSupported=true, columnMetaData=null]).
        at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:793)
        at 
org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeThrough(JdbcDatabaseManager.java:887)
        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:543)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:502)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:485)
        at 
org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:460)
        at 
org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:82)
        at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
        at 
org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2198)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2152)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2135)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2028)
        at 
org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1899)
        at 
org.apache.logging.log4j.spi.AbstractLogger.debug(AbstractLogger.java:453)
        at com.my.app.QueryExecutor.execute(QueryAndroidDeviceExecutor.java:50)
        at com.my.app.TaskExecutor.execute(TaskExecutor.kt:30)
        at com.my.app.TaskExecutor.run(TaskExecutor.kt:57)
        at 
java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at 
java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
        at 
java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
        at java.base/java.lang.Thread.run(Thread.java:834)
{code}

> JDBCAppender tableName from Main Arguments Lookup
> -------------------------------------------------
>
>                 Key: LOG4J2-2757
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2757
>             Project: Log4j 2
>          Issue Type: Question
>          Components: Appenders, JDBC
>    Affects Versions: 2.13.0
>            Reporter: Petar Petrov
>            Priority: Major
>
> Hi, 
> I've posted this on StackOverflow, however, I could not really get any 
> solution there.
> There is a JDBCAppender in my application to which I'd like to set the 
> *tableName* parameter from a [main argument 
> lookup|http://logging.apache.org/log4j/2.x/manual/lookups.html#AppMainArgsLookup].
>  Reason for this is that my database table may optionally have a prefix, so 
> I'm reading this from a configuration file in my application and I'd like to 
> apply it to the appender at runtime.
> {code:java}
>     <JDBC name="TaskLogJDBC" tableName="${main:1}LogEvents">
>         <ConnectionFactory class="my.package.name.ConnectionFactory" 
> method="getConnection"/>
>         <Column name="created_on" isEventTimestamp="true"/>
>         <Column name="lvl" pattern="%level"/>
>         <Column name="logger" pattern="%logger"/>
>         <Column name="message" pattern="%message"/>
>         <Column name="throwable" pattern="%ex{full}"/>
>     </JDBC>
> {code}
> This is what I use in *Main.java* to set the arguments:
> {code:java}
> MainMapLookup.setMainArguments(new String[] { "--prefix", tablesPrefix 
> });{code}
> Unfortunately, this does not seem to work. The JDBCAppender keeps reading the 
> *tableName* parameter verbatim as _${main:1}LogEvents_ instead of 
> _prefix_LogEvents_. I traced it and I think the JDBCAppender configuration 
> read happens before the *MainMapLookup.setMainArguments()* gets called.
> Environment variable lookup is an option, but I'd like to avoid it at this 
> point. Are there any other options or am I doing something wrong?



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

Reply via email to