在log4j中重新连接到DB

时间:2010-10-07 09:57:35

标签: log4j

如果我将JDBCAppender配置为向MySQL发送日志消息 并且,当我的系统启动时,我重新启动数据库是否重新连接到数据库?

2 个答案:

答案 0 :(得分:1)

我在上周末发生了这个用例。我的数据库由Amazon AWS托管。它遍历我的日志数据库,并且通过Log4j JDBC Appender登录到该数据库的所有实例都停止了日志记录。我退回了其中一个应用程序并恢复了日志记录。

因此,通过经验,这个问题的答案似乎是

如果数据库关闭并重新联机,则JDBC appender不会自动重新连接。

修改

可能会覆盖JDBCAppender getConnection以进行修复。

答案 1 :(得分:0)

log4j 1.2.15中的JDBCAppender具有以下代码

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;
  }

所以如果连接不是null,但是被破坏(需要重新连接),log4j将返回到其逻辑的断开连接,并且执行记录到db的语句将失败。

不是解决方法,但正确的解决方案是将log4j替换为logback:请参阅相关答案:Log to a database using log4j