Переподключиться к БД внутри log4j - PullRequest
2 голосов
/ 07 октября 2010

Если у меня есть JDBCAppender, настроенный для отправки сообщений журнала в MySQL и, пока моя система работает, я перезагружаю базу данных, она снова подключается к БД?

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

У меня был этот случай использования в прошлые выходные. Моя база данных размещена на Amazon AWS. Он перевернул мою базу данных журналов, и все экземпляры, вошедшие в эту базу данных через Log4j JDBC Appender, перестали вести журнал. Я сбросил одно из приложений, и оно возобновило запись.

Итак, по опыту, ответ на этот вопрос выглядит следующим образом: Нет .

Если база данных выходит из строя и возвращается в оперативный режим, приложение JDBC не подключается автоматически.

1010 * редактировать *

JDBCAppender getConnection может быть переопределено для исправления.

0 голосов
/ 11 октября 2011

JDBCAppender в log4j 1.2.15 имеет следующий код

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

поэтому, если соединение не является нулевым, но разорвано (требуется переподключение), log4j вернет разорванное соединение в свою логику, и выполнение оператора, выполняющего запись в db, завершится неудачей.

Не обходной путь, но правильное решение - заменить log4j на logback: см. Связанный ответ: Записаться в базу данных, используя log4j

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...