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

Thomas Neidhart commented on LOG4J2-407:
----------------------------------------

A solution could be to use the new method Connection.isValid() which seems to 
query the database. Using the isClosed() can not be used for this purpose.
See the code snippet below, added to the JDBCDatabaseManager. The idea is that 
if we detect that the connection has been closed due to a timeout, we try to 
re-establish it.
I used a timeout of 1s, but this should maybe better made configurable.

{noformat}
    @Override
    protected void writeInternal(final LogEvent event) {
        StringReader reader = null;
        try {
            if (!this.isConnected() || this.connection == null || 
this.connection.isClosed()) {
                throw new AppenderLoggingException(
                        "Cannot write logging event; JDBC manager not connected 
to the database.");
            }

            // the connection was opened before but may have been closed 
automatically due to a timeout
            // try to re-establish connection to the database
            if ( !this.connection.isValid( 1 )) {
                disconnectInternal();
                connectInternal();
            }

{noformat}

> JDBCAppender cannot recover from loss of database connectivity
> --------------------------------------------------------------
>
>                 Key: LOG4J2-407
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-407
>             Project: Log4j 2
>          Issue Type: Bug
>          Components: Appenders
>    Affects Versions: 2.0-beta9
>            Reporter: Michael Kloster
>            Assignee: Nick Williams
>
> The JDBCAppender holds a single database connection for all its logging. If 
> that database connection is closed, it does not attempt to make a new 
> connection.
> Many connection pools automatically close connections after a certain amount 
> of inactivity. (This can be worked around by properly configuring a pool).
> Database connectivity issues are also common enough that a long running 
> application may experience temporary network issues. When the network comes 
> back online, the logging will not resume.
> I've been meaning to submit a patch for this, but I haven't gotten to it. 
> Since I saw that you are looking to come out of beta soon, I thought I would 
> log this issue in case someone else has time to write the patch before I get 
> to it.



--
This message was sent by Atlassian JIRA
(v6.1#6144)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to