在 log4j 中重新连接到数据库
Posted
技术标签:
【中文标题】在 log4j 中重新连接到数据库【英文标题】:Reconnect to DB within log4j 【发布时间】:2010-10-07 09:57:34 【问题描述】:如果我将 JDBCAppender 配置为向 mysql 抛出日志消息 而且,当我的系统启动时,我重新启动数据库,它是否重新连接到数据库?
【问题讨论】:
【参考方案1】:我在上周末遇到了这个用例。我的数据库由 Amazon AWS 托管。它翻转了我的日志数据库,并且所有通过 Log4j JDBC Appender 记录到该数据库的实例都停止了记录。我退回了其中一个应用程序,它恢复了日志记录。
因此,根据经验,这个问题的答案似乎是否。
如果数据库出现故障并重新联机,则 JDBC 附加程序不会自动重新连接。
编辑
JDBCAppender getConnection 可能会被覆盖以修复。
【讨论】:
也许覆盖getConnection()
以确保连接有效。如果没有创建一个新的连接。【参考方案2】:
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;
因此,如果连接不为空,但已断开(需要重新连接),log4j 将向其逻辑返回断开的连接,执行记录到 db 的语句将失败。
不是解决方法,但正确的解决方案是将 log4j 替换为 logback:请参阅相关答案:Log to a database using log4j
【讨论】:
以上是关于在 log4j 中重新连接到数据库的主要内容,如果未能解决你的问题,请参考以下文章
使用 py4j 在 java/python 项目中将 Log4j 连接到 ipython notebook stderr
使用py4j将Log4j连接到java / python项目中的ipython notebook stderr
MySQL Workbench:“MySQL 服务器已消失”时重新连接到数据库?