11

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

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

4

7 回答 7

21

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

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

此外

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

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

附言

该死的那些轮子重新发明的自定义日志实现,就像 c3p0 使用的那个......

于 2011-04-18T04:55:16.617 回答
17

我找到实现这一目标的方法

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

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

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

于 2014-10-25T15:52:21.487 回答
4

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

通过在 log4j.properties 中添加这样的一行,您是在告诉记录器不要用 c3p0 消息打扰您——除非它很重要:

log4j.logger.com.mchange.v2=WARN
于 2013-02-02T22:58:46.830 回答
3

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

如果是这样尝试:

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

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

Logger.getLogger("com.mchange.v2").setLevel(Level.WARNING);
于 2011-04-16T15:41:06.510 回答
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,然后才能使用这段确切的代码。

于 2017-12-19T13:42:56.197 回答
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 文件,则应用配置在应用程序启动时,一切正常。

于 2011-04-17T05:03:55.693 回答
0

这只发生在较旧的 c3p0 版本上。因此,如果您可以更新到较新版本,也可能值得检查。

于 2020-02-03T09:44:32.077 回答