c3p0使用Play Framework 1进行日志记录?

时间:2013-04-08 10:54:24

标签: debugging logging log4j playframework-1.x c3p0

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

有人在Play email list问过这个问题。至少将以下内容添加到log4j.properties不起作用:

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

4 个答案:

答案 0 :(得分: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的日志记录。

不知道是否有某种方法可以启用除此之外的日志记录?

答案 1 :(得分:1)

你在任何地方看到c3p0记录信息吗?是通过标准输出,还是通过java.util.logging?

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

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

您可以将其放在c3p0.properties文件中,或将其设置为System属性(或创建名为mchange-log.properties的文件)​​。有关详情,请参阅here

答案 2 :(得分:0)

您是否在application.conf文件中尝试过这个?

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

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

答案 3 :(得分: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。