Java 使用c3p0在Hibernate中跟踪客户端堆栈

Java 使用c3p0在Hibernate中跟踪客户端堆栈,java,hibernate,logging,c3p0,Java,Hibernate,Logging,C3p0,这可能是的副本,但我提出了一个新问题,因为我没有看到日志的isLoggable方法。我使用org.apache.log4j.Logger的Logger类来记录日志 我的错误是一样的 java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:566) at com.mchange.v2

这可能是的副本,但我提出了一个新问题,因为我没有看到日志的isLoggable方法。我使用org.apache.log4j.Logger的Logger类来记录日志

我的错误是一样的

java.lang.Exception: DEBUG -- CLOSE BY CLIENT STACK TRACE
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:566)
at com.mchange.v2.c3p0.impl.NewPooledConnection.close(NewPooledConnection.java:234)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePool$1DestroyResourceTask.run(BasicResourcePool.java:964)
我的代码是

    public JSONObject getUserDetails(int id) {
    System.setProperty("net.sf.ehcache.skipUpdateCheck", "true");
    long lStartTime = new Date().getTime();
    JSONObject obj = new JSONObject();
    try (Session session = factory.openSession()) {
        Employee emp = (Employee) session.load(Employee.class, id);
        if (emp != null) {
            obj.put("id", emp.getId());
            obj.put("name", emp.getName());
        }
        long lEndTime = new Date().getTime();
        log.info("[ Personal Details ]Time elapsed For Fetching :"
                + (lEndTime - lStartTime));

    } catch (Exception e) {
        log.error(e);
    }
    return obj;
}
编辑:

我的建议是:

public class PersonalisationImpl implements PersonalisationDao {
private void close( Throwable cause ) throws SQLException
{ 
    close( cause, false ); 
}

private void close(Throwable cause, boolean b) {
    // TODO Auto-generated method stub
    assert Thread.holdsLock( this );
    if ( logger.isLoggable( MLevel.FINEST ) )
          logger.log( MLevel.FINEST, this + " closed by a client.", 
                    new Exception("DEBUG -- CLOSE BY CLIENT STACK TRACE") );
}

我应该在代码中的何处编写isLoggable方法,以及应该使用哪个记录器类

您不需要编写
isLoggable(…)
方法。它已经存在于日志库中,c3p0调用它

您的问题是,您正在以
跟踪
/
最佳
级别进行日志记录,这意味着您将获得许多调试信息,包括您不想要的记录堆栈跟踪


对于以
com.mchange
开头的库,您需要弄清楚如何配置您正在使用的任何日志库,以便只在
INFO
或更高级别记录消息。就这样!配置日志记录,以便停止记录调试级消息,这将消失。没问题。您只是记录了太多信息。

谢谢Steve。上述场景的记录器是Java.util包的一部分。我已经编辑了这个问题,把我的实现,这是没有被调用。请检查它。如果您使用的是java.util.logging.*,则需要配置logging.properties。如果您使用的是log4j log4j.properties。如果为logback,则为logback.xml。对于所有内容或至少对于以com.mchange开头的记录器,将默认日志级别设置为INFO。你的实施对我来说毫无意义。看起来您已经将c3p0代码复制到了自己的类中,这是不应该做的。但由于它没有isLoggable方法,所以我使用了Java.util.logging。我到底需要做什么?你不想写任何代码。你不是在寻找任何方法。您所要做的就是编写一个配置文件,告诉您的日志库(无论您选择哪一个),不要在下面记录信息。您可以看到一些(糟糕!不稳定!)示例配置文件,我用于测试我想要编写代码,但我不确定它应该如何修复此错误。