使用 c3p0 在 Hibernate 中进行客户端堆栈跟踪
CLIENT STACK TRACE in Hibernate using c3p0
这可能与 Weird Error: CLOSE BY CLIENT STACK TRACE 重复,但我问了一个新问题,因为我没有看到 Log 的 isLoggable 方法。我正在使用 org.apache.log4j.Logger 的 Logger class 进行日志记录。
我的错误是一样的
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.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePoolDestroyResourceTask.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方法的方法在代码中应该写在什么地方,使用哪个loggerclass?
您没有编写 isLoggable(...)
方法。已经存在于日志库中并且 c3p0 调用它。
你的问题是你在 TRACE
/FINEST
级别进行日志记录,这意味着你得到了很多你不想要的调试信息,包括记录的堆栈跟踪。
您需要弄清楚如何配置您使用的任何日志记录库,以仅记录 INFO
或更高版本的消息,以 com.mchange
开头的库。而已!配置您的日志记录,以便您停止记录调试级别的消息,这将消失。没有问题。您只是记录了太多信息。
这可能与 Weird Error: CLOSE BY CLIENT STACK TRACE 重复,但我问了一个新问题,因为我没有看到 Log 的 isLoggable 方法。我正在使用 org.apache.log4j.Logger 的 Logger class 进行日志记录。
我的错误是一样的
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.C3P0PooledConnectionPoolPooledConnectionResourcePoolManager.destroyResource(C3P0PooledConnectionPool.java:470)
at com.mchange.v2.resourcepool.BasicResourcePoolDestroyResourceTask.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方法的方法在代码中应该写在什么地方,使用哪个loggerclass?
您没有编写 isLoggable(...)
方法。已经存在于日志库中并且 c3p0 调用它。
你的问题是你在 TRACE
/FINEST
级别进行日志记录,这意味着你得到了很多你不想要的调试信息,包括记录的堆栈跟踪。
您需要弄清楚如何配置您使用的任何日志记录库,以仅记录 INFO
或更高版本的消息,以 com.mchange
开头的库。而已!配置您的日志记录,以便您停止记录调试级别的消息,这将消失。没有问题。您只是记录了太多信息。