You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Petar Petrov (Jira)" <ji...@apache.org> on 2020/01/13 08:49:00 UTC

[jira] [Commented] (LOG4J2-2661) JDBC Append should reconnect when connection is lost in JdbcDatabaseManager.writeInternal()

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

Petar Petrov commented on LOG4J2-2661:
--------------------------------------

Hi, I've got this issue as well.

 
{code:java}
2020-01-13 09:32:50,521 pool-2-thread-5 ERROR Unable to write to database [JdbcManager{name=TaskLogJDBC, bufferSize=0, tableName=dev_TaskLog, columnConfigs=[{ ... }] for appender [TaskLogJDBC]. org.apache.logging.log4j.core.appender.AppenderLoggingException: Cannot write logging event; JDBC manager not connected to the database.2020-01-13 09:32:50,521 pool-2-thread-5 ERROR Unable to write to database [JdbcManager{name=TaskLogJDBC, bufferSize=0, tableName=dev_TaskLog, columnConfigs=[{.... }], columnMappings=null}] for appender [TaskLogJDBC]. org.apache.logging.log4j.core.appender.AppenderLoggingException: Cannot write logging event; JDBC manager not connected to the database. at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:770) at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeThrough(JdbcDatabaseManager.java:865) 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:464) at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:448) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:431) at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406) at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63) at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146) at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2170) at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2125) at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108) at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2019) at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1890) at org.apache.logging.log4j.spi.AbstractLogger.debug(AbstractLogger.java:444)
{code}
In my case it is with programmatically added appender, e.g.,
{code:java}
final var ctx = (LoggerContext) LogManager.getContext(false);
final var jdbcAppender = JdbcAppender.newBuilder().setName("TaskLogJDBC")
        .setTableName(prefix + "TaskLog")
        .setConfiguration(ctx.getConfiguration()).setConnectionSource(new Log4j2JDBCAppenderConnectionFactory()).setColumnConfigs(ColumnConfig.newBuilder().setName("created_on").setEventTimestamp(true).build(),
                ColumnConfig.newBuilder().setName(....).build())
        .build();

ctx.getConfiguration().addAppender(jdbcAppender);
jdbcAppender.start();
ctx.updateLoggers();
{code}
Funny enough, this issue does not seem to appear when adding the appender using log4j2 XML configuration. I'm using MyBatis' connection pool and it might be that the connection gets closed after a while. I have not yet traced why that happens, but it's strange that the appender does not reconnect.

 

 

> JDBC Append should reconnect when connection is lost in JdbcDatabaseManager.writeInternal()
> -------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-2661
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-2661
>             Project: Log4j 2
>          Issue Type: Bug
>            Reporter: Gary D. Gregory
>            Assignee: Gary D. Gregory
>            Priority: Major
>
> JDBC Append should reconnect when connection is lost in JdbcDatabaseManager.writeInternal()
> {noformat}
> 2019-07-19 13:14:02,418 qtp983767292-69 ERROR An exception occurred processing Appender MySQL-Request org.apache.logging.log4j.core.appender.AppenderLoggingException: Cannot write logging event; JDBC manager not connected to the database.
> 	at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeInternal(JdbcDatabaseManager.java:770)
> 	at org.apache.logging.log4j.core.appender.db.jdbc.JdbcDatabaseManager.writeThrough(JdbcDatabaseManager.java:865)
> 	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:464)
> 	at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:448)
> 	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:431)
> 	at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:406)
> 	at org.apache.logging.log4j.core.config.AwaitCompletionReliabilityStrategy.log(AwaitCompletionReliabilityStrategy.java:63)
> 	at org.apache.logging.log4j.core.Logger.logMessage(Logger.java:146)
> 	at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2170)
> 	at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2125)
> 	at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2108)
> 	at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1827)
> 	at org.apache.logging.log4j.spi.AbstractLogger.info(AbstractLogger.java:1281)
> 	at com.rs.seagull.httpmonitor.AbstractEventPublisher.publishRequest(AbstractEventPublisher.java:98)
> 	at com.rs.seagull.httpmonitor.HttpServletEventPublisher.publishRequest(HttpServletEventPublisher.java:1)
> 	at com.rs.seagull.httpmonitor.AbstractEventPublisher.monitorRequest(AbstractEventPublisher.java:74)
> 	at com.rs.seagull.httpmonitor.HttpServletEventPublisher.monitorRequest(HttpServletEventPublisher.java:36)
> 	at com.rs.seagull.httpmonitor.jetty.PolicyEngineProxyServlet.monitorRequest(PolicyEngineProxyServlet.java:364)
> 	at com.rs.seagull.httpmonitor.jetty.PolicyEngineProxyServlet.sendProxyRequest(PolicyEngineProxyServlet.java:520)
> 	at org.eclipse.jetty.proxy.AsyncMiddleManServlet.service(AsyncMiddleManServlet.java:141)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
> 	at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:876)
> 	at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
> 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
> 	at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1711)
> 	at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
> 	at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1347)
> 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
> 	at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:480)
> 	at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1678)
> 	at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
> 	at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1249)
> 	at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
> 	at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:152)
> 	at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
> 	at org.eclipse.jetty.server.Server.handle(Server.java:505)
> 	at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:370)
> 	at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:267)
> 	at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
> 	at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> 	at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
> 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
> 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
> 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
> 	at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
> 	at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
> 	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:781)
> 	at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:917)
> 	at java.lang.Thread.run(Unknown Source)
> {noformat}



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