2

有没有办法让 Play framework 1.2.5 显示 c3p0 调试日志?

有人在Play 电子邮件列表中问过这个问题;至少将以下内容添加到 log4j.properties 不起作用:

log4j.logger.com.mchange.v2.c3p0=DEBUG
log4j.category.com.mchange=DEBUG
log4j.logger.com.mchange=DEBUG
4

4 回答 4

3

通过阅读一些 Play 源代码,DBPlugin:onApplicationStart似乎具有以下内容:

...
System.setProperty("com.mchange.v2.log.MLog", "com.mchange.v2.log.FallbackMLog");
System.setProperty("com.mchange.v2.log.FallbackMLog.DEFAULT_CUTOFF_LEVEL", "OFF");
ComboPooledDataSource ds = new ComboPooledDataSource();
...

在注释掉这些 System.setProperty 行并构建一个本地 jar 之后,我能够看到 c3p0 日志记录。

不知道除此之外是否还有其他方法可以启用日志记录?

于 2013-04-08T11:57:30.367 回答
1

您是否在任何地方看到 c3p0 日志记录信息?它是通过标准输出还是通过 java.util.logging?

无论如何,要尝试的一件事是

com.mchange.v2.log.MLog=com.mchange.v2.log.log4j.Log4jMLog

您可以将其放在 c3p0.properties 文件中,或将其设置为系统属性(或创建一个名为 mchange-log.properties 的文件)。看到这里更多。

于 2013-04-08T11:38:43.167 回答
0

您是否在 application.conf 文件中尝试过此操作?

# Debug SQL statements (logged using DEBUG level):
jpa.debugSQL=true

不确定它是否会为您提供所需的日志,但值得一试。

于 2013-04-10T01:13:04.317 回答
0

在讨论中,avfl 和 Scott 发现了 OnApplicationStart 作业的另一种方法:

package jobs;

import play.jobs.*;
import play.Logger;

@OnApplicationStart
public class C3p0Logging extends Job {

    public void doJob() {
        Logger.info("Setting custom c3p0 log level");
        com.mchange.v2.log.log4j.Log4jMLog.getLogger().setLevel(com.mchange.v2.log.MLevel.FINEST);
    }   
}

这似乎以 c3p0 FallbackMLog -> System.err 告终。还没有找到使用这种方法将日志获取到 log4j 的方法。

于 2013-04-16T12:31:59.680 回答