如果我将JDBCAppender配置为向MySQL发送日志消息 并且,当我的系统启动时,我重新启动数据库是否重新连接到数据库?
答案 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