使用c3p0在Hibernate中使用CLIENT STACK TRACE

时间:2016-03-03 04:52:20

标签: java hibernate logging c3p0

这可能是Weird Error: CLOSE BY CLIENT STACK TRACE的副本但是我问了一个新问题,因为我没有看到Log的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方法的哪个方法以及我应该使用哪个logger类?

1 个答案:

答案 0 :(得分:3)

你没有写isLoggable(...)方法。已存在于日志记录库中,c3p0将其调用。

您的问题是您正在TRACE / FINEST级别进行登录,这意味着您将获得大量调试信息,包括您不想要的已记录堆栈跟踪。

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