2010-10-07 5 views
2

Si j'ai un JDBCAppender configuré pour lancer des messages de journal à MySQL et, pendant que mon système est en place je redémarre la base de données est-il reconnecter à DB?Se reconnecter à DB dans log4j

Répondre

1

J'ai eu ce cas d'utilisation au cours de la fin de semaine dernière. Ma base de données est hébergée par Amazon AWS. Il a roulé sur ma base de données de journal et toutes les instances se connectant à cette base de données via le Log4j JDBC Appender ont arrêté la journalisation. J'ai rebondi l'une des applications et il a repris la journalisation.

Donc, la réponse à cette question, par l'expérience, semble être No.

Si la base de données tombe en panne et revient en ligne, l'appendeur JDBC ne se reconnecte pas automatiquement.

modifier

JDBCAppender getConnection peut être annihilé à corriger.

+0

Alors maintenant, ma question est, comment travailler autour de cela. – MikeNereson

+0

Peut-être substituer 'getConnection()' pour s'assurer que la connexion est valide. Sinon, créez une nouvelle connexion. – MikeNereson

0

JDBCAppender dans log4j 1.2.15 a le code suivant

protected Connection getConnection() throws SQLException { 
     if (!DriverManager.getDrivers().hasMoreElements()) 
     setDriver("sun.jdbc.odbc.JdbcOdbcDriver"); 

     if (connection == null) { 
     connection = DriverManager.getConnection(databaseURL, databaseUser, 
        databasePassword); 
     } 

     return connection; 
    } 

donc si la connexion est non nulle, mais elle est cassée (besoins reconnectent) log4j retournera connexion interrompue à sa logique, et l'état d'exécution qui ne se connectant à DB échouera.

Pas une solution, mais une solution appropriée consiste à remplacer log4j avec logback: voir la réponse concernant: Log to a database using log4j

Questions connexes