关闭Hibernate c3p0的日志记录

时间:2011-04-16 12:52:25

标签: java hibernate logging c3p0

我正在使用Hibernate的c3p0连接池和标准Java 1.4 java.util.logging。启动时,我的应用程序在static块中设置它的日志记录属性(包括格式化程序和日志级别)。每次我启动应用程序时,都会看到以下内容:

2011-04-16 17-43-51 [com.mchange.v2.log.MLog] INFO: {MLog.<clinit>) MLog clients using java 1.4+ standard logging.
2011-04-16 17-43-51 [com.mchange.v2.c3p0.C3P0Registry] INFO: {C3P0Registry.banner) Initializing c3p0-0.9.1 [built 16-January-2007 14:46:42; debug? true; trace: 10]
2011-04-16 17-43-51 [com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource] INFO: {AbstractPoolBackedDataSource.getPoolManager)
...

我试过

Logger.getLogger("com.mchange").setLevel(Level.WARNING);
com.mchange.v2.log.MLog.getLogger().setLevel(MLevel.WARNING);
System.setProperty("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "WARNING");

但是我现在找到的阻止它的唯一方法是

Logger.getLogger("").setLevel(Level.WARNING);

影响一切 - 不是一个好的副作用。谷歌没有帮助。有人可以帮忙吗?

7 个答案:

答案 0 :(得分:19)

我找到的方法是设置系统属性

System.setProperty("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");

除了

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

我想,没有任何其他日志记录系统会使这个可选,但似乎我错了。

P.S。

该死的那些轮子改造的自定义日志记录实现,就像c3p0 ...

使用的那样

答案 1 :(得分:11)

我找到实现这个目标的方式

在您的类路径中创建一个名为 mchange-log.properties 的文件,并将其添加到Frozen Spider建议的属性中。

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

即使您无法直接设置系统属性,这也能正常工作。

答案 2 :(得分:3)

您不想看到任何c3p0日志记录吗?

若是,请尝试:

Logger.getLogger("com.mchange.v2.c3p0").setLevel(Level.WARNING);

或者,如果您甚至不想看到日志的第一行:

Logger.getLogger("com.mchange.v2").setLevel(Level.WARNING);

答案 3 :(得分:2)

c3p0日志记录默认为DEBUG。这可能会导致很多噪音。

通过向log4j.properties添加这样的行,您告诉记录器不要打扰c3p0消息 - 除非它是重要的东西:

log4j.logger.com.mchange.v2=WARN

答案 4 :(得分:1)

这可能真的很晚了,但是根据c3p0项目网站,可以在mchange-log.properties内配置日志记录,以便您可以使用slf4j或log4j(也可以使用Logback)捕获信息。 / p>

链接http://www.mchange.com/projects/c3p0/#configuring_logging提供的信息在mchange-log.properties文件中将属性com.mchange.v2.log.MLog设置为等于com.mchange.v2.log.slf4j.Slf4jMLog,然后在logback.xml中提供记录器像这样:

<logger name="com.mchange" level="warn" additivity="false">
    <appender-ref ref="c3p0-log" />
</logger>

注意:在使用这段确切的代码之前,您需要创建一个名为c3p0-log的logback appender。

答案 5 :(得分:0)

在根类路径中创建一个名为log4j.properties的文件 在那里设置以下内容,

# Configure the name of the file for the LOGGER appender
log4j.appender.LOGGER=org.apache.log4j.ConsoleAppender
log4j.appender.LOGGER.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGGER.layout.ConversionPattern=%d{MM-dd@HH:mm:ss} %-5p (%13F:%L) %3x - %m%n
log4j.appender.LOGGER.append=false

# this line logs everything from hibernate package at info level, you can refine this to include only some pachages like log4j.logger.org.hibernate.hql etc.,
log4j.logger.org.hibernate=INFO, LOGGER

log4j.logger.org.jboss.cache=INFO, LOGGER

这是一种更好的实现日志记录的方法,因为如果以编程方式设置日志记录策略,那么配置有时可能根本不会生效(就像你的情况一样)..如果你使用log4j.properties文件, config应用于应用程序启动&amp;一切顺利。

答案 6 :(得分:0)

这仅在较旧的c3p0版本上发生。因此,是否还可以更新到较新的版本也是值得的。