我正在使用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);
影响一切 - 不是一个好的副作用。谷歌没有帮助。有人可以帮忙吗?
答案 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版本上发生。因此,是否还可以更新到较新的版本也是值得的。