我正在使用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);
这影响了一切 - 不是一个好的副作用。谷歌没有帮助。有人可以帮忙吗?
我找到的方法是设置系统属性
System.setProperty("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
此外
System.setProperty("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "WARNING");
我想,没有任何其他日志系统会使这个可选,但似乎我错了。
附:
该死的那些轮改造的自定义日志记录实现,就像c3p0使用的那样...
我找到实现这一目标的方式
在类路径中创建一个名为mchange-log.properties的文件,并将其放入Frozen Spider建议的属性中。
com.mchange.v2.log.MLog=com.mchange.v2.log.FallbackMLog
com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL=WARNING
即使您无法直接设置系统属性,这也可以正常工作。
你不想看到任何c3p0日志记录吗?
如果是这样尝试:
Logger.getLogger("com.mchange.v2.c3p0").setLevel(Level.WARNING);
或者,如果您甚至不想看到日志的第一行:
Logger.getLogger("com.mchange.v2").setLevel(Level.WARNING);
看来c3p0日志记录默认为DEBUG。这可能会导致很多噪音。
通过向log4j.properties添加这样的行,您告诉记录器不要打扰c3p0消息 - 除非它是重要的:
log4j.logger.com.mchange.v2=WARN
这可能真的很晚,但根据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。
在根类路径中创建一个名为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文件,则应用配置在应用程序启动时,一切顺利。