有没有办法让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
答案 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。