如何关闭 java c3p0 连接池库中的日志记录?

问题描述 投票:0回答:8

大家好,我刚刚开始使用 c3p0 进行数据库连接池。目前它正在将自身附加到我的 log4j 输出。如何仅针对 c3p0 设置注销或至少设置为 SEVERE 级别?我尝试调整属性文件,但不确定它是否被正确拾取。

关于如何最好地关闭它有什么想法吗?

谢谢

更新: 这似乎在 log4j.properties 文件中起作用

log4j.logger.com.mchange.v2.c3p0.impl=INFO

log4j.logger.com.mchange=INFO
java c3p0
8个回答
41
投票

对于那些不使用配置文件的人,只需在加载连接池之前在代码中添加以下内容即可。

Properties p = new Properties(System.getProperties());
p.put("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
p.put("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "OFF"); // Off or any other level
System.setProperties(p);

24
投票

如果您使用 log4j.xml 文件,您可以简单地为 c3po 包定义一个记录器:

<logger name="com.mchange.v2.c3p0">
    <level value="SEVERE"/>
</logger>

log4j.properties 有类似的方法。我认为这只是:

log4j.logger.com.mchange.v2.c3p0=SEVERE

4
投票

我收到如下消息:

Tue Feb 12 13:42:01 EST 2013 INFO: Profiler Event: [FETCH]  at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:76) duration: 0 ms, connection-id: 67, statement-id: 23, resultset-id: 27

这让我认为 C3P0 正在记录这些消息。实际上,该消息来自 mysql 连接器,因为我通过使用如下连接字符串启用了分析:

jdbc:mysql://localhost/database?profileSQL=true

删除

?profileSQL=true
以使其停止记录这些消息。


2
投票

我解决了代码行的问题:

com.mchange.v2.log.MLog.getLogger().setLevel(MLevel.INFO);

我在我的应用程序中使用 log4j。


1
投票

您可以通过在 log4j.xml 中添加以下行来设置日志级别 需要至少在错误级别进行日志记录。

< category name="com.mchange" additivity="false"> 
        < priority value="ERROR"/>
        < appender-ref ref="ASYNC"/>
     </ category>

如果您确实想关闭 c3P0 日志记录设置属性

com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=OFF

在c3p0-Config.properties中

或者您可以直接在代码中将其设置为系统属性

System.setProperty("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL",MLevel.OFF);


1
投票

我正在通过 korma 开发 clojure,并且在我的一生中我无法加载任何属性文件(我是 clojure 的新手,所以我责怪自己)。 如果您也有类似的情况,以下内容可能会对您有所帮助。

(System/setProperties 
  (doto (java.util.Properties. (System/getProperties))
    (.put "com.mchange.v2.log.MLog" "com.mchange.v2.log.FallbackMLog")
    (.put "com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL" "OFF")))

这基本上是 Philippe Carriere 上面答案的 clojure 移植,非常感谢!


0
投票

如果您使用 Spring,您可以通过在 application.properties 中配置来禁用 c3p0 日志记录:

logging.level.com.mchange.v2.c3p0=off

0
投票

以下解决方案确实有效:

Properties p = new Properties(System.getProperties());
p.put("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
p.put("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "OFF"); // Off or any other level
System.setProperties(p);

但是其他配置解决方案都不适合我。最后,我通过在类路径(src/test/resources)中创建文件 mchange-log.properties 并包含以下内容成功地抑制了它:

com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog
com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=OFF

我在以下位置找到了解决方案: http://springoftech.blogspot.com/2012/10/using-c3p0-with-logback.html

希望有人觉得它有用。

© www.soinside.com 2019 - 2024. All rights reserved.