使用连接池在mysql数据库中使用log4j进行日志记录

时间:2012-04-13 00:49:37

标签: java mysql jdbc log4j connection-pooling

我已经从JDBC实现了一个连接池来获取和关闭我的数据访问对象的连接,以便使用java存储和检索来自mysql数据库的数据。

我还想通过名为JDBCAppender的appender将一个名为log4j的库存储在数据库中的主要操作和异常。

在使用连接池之前,事件的记录很好,因为一次只有一个连接用于操作。现在连接被同时从池中抓取并传回池中,一旦一个连接(第一个)被关闭,记录器似乎不知道如何获得另一个连接。

如何登录具有连接池的数据库?

我自己已经调查过,我需要做的就是覆盖JDBCAppender.java中的getConnection()方法(在apache log4j 1.2.16库中)...但我有两个问题。

我是否需要在LOG4J 1.2.16 jar文件中使用我的连接池实现类? 假设我从池中获得连接,如何将LOG4J 1.2.16 Java文件重新编译为jar文件?

到目前为止,您已经阅读了我可以提供的连接池实现和JDBCAppender java类,我们可以从那里获取它...

1 个答案:

答案 0 :(得分:3)

首先,回答您的具体问题:您的连接池类不需要在Log4J JAR中。您只需在运行代码时在JAR中拥有所有类和CLASSPATH个文件。 CLASSPATH将获取所有内容。所以这不是你问题的原因。

无论您使用的是自己的连接池还是第三方连接池,我都无法通过您的问题和后来的评论来判断。如果是前者,您绝对应该切换到第三方池,例如DBCPC3P0BoneCP。如果是后者,那么您的问题可能是由您配置池的方式引起的。它绝对与JAR无关,它们都在你的CLASSPATH中,不需要组合或混合或类似的东西。

我读了javadoc for JDBCAppender并注意到了一些事情。首先,请确保覆盖closeConnection(),而不仅仅是openConnection()。接下来,我注意到一个警告,即将来可能会更改此类,并且不会记录异常。

出于这个原因,您可能还想使用LogBack而不是Log4J。它由同一作者代表并代表更新的技术。其DBAppender似乎支持记录异常,还允许您插入Connection来源,而不是覆盖getConnection()