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