重新连接到log4j内的数据库

重新连接到log4j内的数据库,log4j,Log4j,如果我有一个JDBCAppender配置为向MySQL抛出日志消息 而且,当我的系统启动时,我重新启动数据库,它是否重新连接到数据库?我在上周末遇到了这个用例。我的数据库由Amazon AWS托管。它覆盖了我的日志数据库,所有通过log4jdbc Appender登录到该数据库的实例都停止了日志记录。我跳转了其中一个应用程序,它恢复了日志记录 因此,根据经验,这个问题的答案似乎是否定的 如果数据库关闭并重新联机,JDBC appender不会自动重新连接 编辑 JDBCAppender可能会被覆

如果我有一个JDBCAppender配置为向MySQL抛出日志消息
而且,当我的系统启动时,我重新启动数据库,它是否重新连接到数据库?

我在上周末遇到了这个用例。我的数据库由Amazon AWS托管。它覆盖了我的日志数据库,所有通过log4jdbc Appender登录到该数据库的实例都停止了日志记录。我跳转了其中一个应用程序,它恢复了日志记录

因此,根据经验,这个问题的答案似乎是否定的

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

编辑


JDBCAppender可能会被覆盖以修复。

log4j 1.2.15中的JDBCAppender具有以下代码

protectedconnection getConnection()引发SQLException{
如果(!DriverManager.getDrivers().hasMoreElements())
setDriver(“sun.jdbc.odbc.JdbcOdbcDriver”);
if(连接==null){
connection=DriverManager.getConnection(数据库URL、数据库用户、,
数据库密码);
}
回路连接;
}
所以,若连接不是空的,但断开了(需要重新连接),log4j将把断开的连接返回到它的逻辑,执行记录到db的语句将失败


这不是一个解决方法,但一个合适的解决方案是用logback替换log4j:请参阅相关答案:

可能覆盖
getConnection()
,以确保连接有效。如果没有,请创建一个新连接。