【问题标题】:CLIENT STACK TRACE in Hibernate using c3p0使用 c3p0 在 Hibernate 中进行客户端堆栈跟踪
【发布时间】:2016-03-03 04:52:19
【问题描述】:

这可能与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类?

【问题讨论】:

    标签: java hibernate logging c3p0


    【解决方案1】:

    您没有编写isLoggable(...) 方法。日志库中已经存在并且 c3p0 调用它。

    您的问题是您正在以TRACE/FINEST 级别进行日志记录,这意味着您会收到很多您不想要的调试信息,包括记录的堆栈跟踪。

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

    【讨论】:

    • 谢谢史蒂夫。上述场景的记录器是 Java.util 包。我已经通过放置我的实现来编辑问题并且没有被调用。请检查一下。
    • 如果您使用的是 java.util.logging.*,您需要配置 logging.properties。如果您使用的是 log4j log4j.properties。如果是 logback,那么 logback.xml。将默认日志级别设置为 INFO,对于所有内容或至少对于以 com.mchange 开头的记录器。您的实施对我来说毫无意义。看起来您已将 c3p0 代码复制到您自己的类之一中,您不应该这样做。
    • 最初我已经配置了 Log4j。但由于它没有 isLoggable 方法,所以我使用了 Java.util.logging。我到底需要做什么?
    • 你不想写任何代码。你不是在寻找任何方法。您要做的就是编写一个配置文件,告诉您的日志库,无论您选择哪个,都不要记录以下信息。你可以看到一些(糟糕!不稳定!)我用于测试的示例配置文件here
    • 我想写代码,但我不知道应该用什么来修复这个错误。
    猜你喜欢
    • 2011-05-22
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 2017-03-25
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多