关闭Hibernate c3p0的日志记录

问题描述 投票:9回答:6

我正在使用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);

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

java hibernate logging c3p0
6个回答
19
投票

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

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

此外

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

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

附:

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


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

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


3
投票

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

如果是这样尝试:

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

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

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

2
投票

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

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

log4j.logger.com.mchange.v2=WARN

1
投票

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

链接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。


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文件,则应用配置在应用程序启动时,一切顺利。

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