添加部分debug日志,修改sqlcontext is null的日志级别。因为Oracle的T4PreparedStatement不是通过connection的prepareStatement创建的,会频繁提示。

pull/1879/head
xiaobingyang 3 years ago
parent 6fcdb5fdef
commit 75ad585fc6

@ -129,27 +129,35 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
if (sqlContext != null) { if (sqlContext != null) {
sql = sqlContext.getSql(); sql = sqlContext.getSql();
sqlContext.enterExecute(); sqlContext.enterExecute();
logger.debug("sql profiler enter execute: class: {}, method: {}, sql: {}.",
clazz.getName(),
method.getName(),
sql);
} }
} }
} else if (target instanceof java.sql.Statement) { } else if (target instanceof Statement) {
if (STATEMENT_EXECUTE_METHOD_MAP.isMatch(method.getTargetMethod())) { if (STATEMENT_EXECUTE_METHOD_MAP.isMatch(method.getTargetMethod())) {
sql = String.valueOf(args[0]); sql = String.valueOf(args[0]);
StatementSqlContext sqlContext = statement2SqlMap.get(target); StatementSqlContext sqlContext = statement2SqlMap.get(target);
if (sqlContext != null) { if (sqlContext != null) {
sqlContext.enterExecute(); sqlContext.enterExecute();
} else {
if (logger.isDebugEnabled()) {
logger.debug("sql profiler enter execute: class: {}, method: {}, sql: {}.", logger.debug("sql profiler enter execute: class: {}, method: {}, sql: {}.",
clazz.getName(), clazz.getName(),
method.getName(), method.getName(),
sql); sql);
} }
}
} else if (STATEMENT_EXECUTE_BATCH_METHOD_MAP.isMatch(method.getTargetMethod())) { } else if (STATEMENT_EXECUTE_BATCH_METHOD_MAP.isMatch(method.getTargetMethod())) {
StatementSqlContext sqlContext = statement2SqlMap.get(target); StatementSqlContext sqlContext = statement2SqlMap.get(target);
if (sqlContext != null) { if (sqlContext != null) {
sql = sqlContext.getBatchSql(); sql = sqlContext.getBatchSql();
sqlContext.enterExecute(); sqlContext.enterExecute();
logger.debug("sql profiler enter execute: class: {}, method: {}, sql: {}.",
clazz.getName(),
method.getName(),
sql);
} }
} }
} }
@ -201,7 +209,7 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
handleAfterPrepareStatementMethod(advice, cost, isSuccess); handleAfterPrepareStatementMethod(advice, cost, isSuccess);
return; return;
} }
if (advice.getTarget() instanceof java.sql.Statement) { if (advice.getTarget() instanceof Statement) {
handleAfterStatementMethod(advice, cost, isSuccess); handleAfterStatementMethod(advice, cost, isSuccess);
} }
} catch (Throwable e) { } catch (Throwable e) {
@ -217,8 +225,9 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
} }
if (STATEMENT_EXECUTE_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { if (STATEMENT_EXECUTE_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
StatementSqlContext sqlContext = getAndCheckSqlContext(advice); StatementSqlContext sqlContext = getAndCheckStatementSqlContext(advice);
if(sqlContext == null) return; if (sqlContext == null) return;
sqlContext.exitExecute(); sqlContext.exitExecute();
if (sqlContext.isExecuteStackEmpty()) { if (sqlContext.isExecuteStackEmpty()) {
statement2SqlMap.remove(advice.getTarget()); statement2SqlMap.remove(advice.getTarget());
@ -230,19 +239,19 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
appendResult(advice, cost, isSuccess, sql, null, null, null); appendResult(advice, cost, isSuccess, sql, null, null, null);
} }
} else if (STATEMENT_ADD_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (STATEMENT_ADD_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
StatementSqlContext sqlContext = getAndCheckSqlContext(advice);
if(sqlContext == null) return;
String sql = (String) advice.getParams()[0]; String sql = (String) advice.getParams()[0];
StatementSqlContext sqlContext = getAndCheckStatementSqlContext(advice);
if (sqlContext == null) return;
sqlContext.addBatch(sql); sqlContext.addBatch(sql);
} else if (STATEMENT_CLEAR_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (STATEMENT_CLEAR_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
StatementSqlContext sqlContext = getAndCheckSqlContext(advice); StatementSqlContext sqlContext = getAndCheckStatementSqlContext(advice);
if(sqlContext == null) return; if (sqlContext == null) return;
sqlContext.clearBatch(); sqlContext.clearBatch();
} else if (STATEMENT_EXECUTE_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (STATEMENT_EXECUTE_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
StatementSqlContext sqlContext = getAndCheckSqlContext(advice); StatementSqlContext sqlContext = getAndCheckStatementSqlContext(advice);
if(sqlContext == null) return; if (sqlContext == null) return;
sqlContext.exitExecute(); sqlContext.exitExecute();
if (sqlContext.isExecuteStackEmpty()) { if (sqlContext.isExecuteStackEmpty()) {
@ -262,10 +271,10 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
} }
} }
private StatementSqlContext getAndCheckSqlContext(Advice advice){ private StatementSqlContext getAndCheckStatementSqlContext(Advice advice) {
StatementSqlContext sqlContext = statement2SqlMap.get(advice.getTarget()); StatementSqlContext sqlContext = statement2SqlMap.get(advice.getTarget());
if (sqlContext == null) { if (sqlContext == null) {
logger.warn("sql context is null, target: {}, class: {}, method: {}, param length: {}", logger.debug("sql context is null, target: {}, class: {}, method: {}, param length: {}",
advice.getTarget(), advice.getTarget(),
advice.getTarget().getClass(), advice.getTarget().getClass(),
advice.getMethod().getName(), advice.getMethod().getName(),
@ -276,26 +285,41 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
return sqlContext; return sqlContext;
} }
private void handleAfterPrepareStatementMethod(Advice advice, double cost, boolean isSuccess) throws ExpressException { private PreparedStatementSqlContext getAndCheckPreparedStatementSqlContext(Advice advice) {
if (advice.getMethod().getTargetMethod() == null) {
return;
}
PreparedStatementSqlContext sqlContext = preparedStatement2SqlMap.get(advice.getTarget()); PreparedStatementSqlContext sqlContext = preparedStatement2SqlMap.get(advice.getTarget());
if (sqlContext == null) { if (sqlContext == null) {
logger.warn("sql context is null, target: {}, class: {}, method: {}, param length: {}", logger.debug("sql context is null, target: {}, class: {}, method: {}, param length: {}",
advice.getTarget(), advice.getTarget(),
advice.getTarget().getClass(), advice.getTarget().getClass(),
advice.getMethod().getName(), advice.getMethod().getName(),
advice.getMethod().getTargetMethod().getParameterTypes().length); advice.getMethod().getTargetMethod().getParameterTypes().length);
return null;
}
return sqlContext;
}
private void handleAfterPrepareStatementMethod(Advice advice, double cost, boolean isSuccess) throws ExpressException {
if (advice.getMethod().getTargetMethod() == null) {
return; return;
} }
if (PREPARED_STATEMENT_SET_PARAM_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { if (PREPARED_STATEMENT_SET_PARAM_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
PreparedStatementSqlContext sqlContext = getAndCheckPreparedStatementSqlContext(advice);
if (sqlContext == null) return;
Integer parameterIndex = (Integer) advice.getParams()[0]; Integer parameterIndex = (Integer) advice.getParams()[0];
sqlContext.setParam(parameterIndex, advice.getParams()[1]); sqlContext.setParam(parameterIndex, advice.getParams()[1]);
} else if (PREPARED_STATEMENT_EXECUTE_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (PREPARED_STATEMENT_EXECUTE_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
PreparedStatementSqlContext sqlContext = getAndCheckPreparedStatementSqlContext(advice);
if (sqlContext == null) return;
sqlContext.exitExecute(); sqlContext.exitExecute();
logger.debug("preparedStatement: {} exit execute. method: {}, class: {}",
advice.getReturnObj(),
advice.getMethod().getName(),
advice.getClazz().getName());
if (sqlContext.isExecuteStackEmpty()) { if (sqlContext.isExecuteStackEmpty()) {
statement2SqlMap.remove(advice.getTarget()); statement2SqlMap.remove(advice.getTarget());
} }
@ -305,11 +329,25 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
appendResult(advice, cost, isSuccess, sqlContext.getSql(), sqlContext.getParamsMap().values(), null, null); appendResult(advice, cost, isSuccess, sqlContext.getSql(), sqlContext.getParamsMap().values(), null, null);
} }
} else if (PREPARED_STATEMENT_ADD_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (PREPARED_STATEMENT_ADD_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
PreparedStatementSqlContext sqlContext = getAndCheckPreparedStatementSqlContext(advice);
if (sqlContext == null) return;
sqlContext.addBatch(); sqlContext.addBatch();
} else if (STATEMENT_CLEAR_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (STATEMENT_CLEAR_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
PreparedStatementSqlContext sqlContext = getAndCheckPreparedStatementSqlContext(advice);
if (sqlContext == null) return;
sqlContext.clearBatch(); sqlContext.clearBatch();
} else if (STATEMENT_EXECUTE_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) { } else if (STATEMENT_EXECUTE_BATCH_METHOD_MAP.isMatch(advice.getMethod().getTargetMethod())) {
PreparedStatementSqlContext sqlContext = getAndCheckPreparedStatementSqlContext(advice);
if (sqlContext == null) return;
sqlContext.exitExecute(); sqlContext.exitExecute();
logger.debug("preparedStatement: {} exit execute. method: {}, class: {}",
advice.getReturnObj(),
advice.getMethod().getName(),
advice.getClazz().getName());
if (sqlContext.isExecuteStackEmpty()) { if (sqlContext.isExecuteStackEmpty()) {
statement2SqlMap.remove(advice.getTarget()); statement2SqlMap.remove(advice.getTarget());
} }
@ -334,6 +372,8 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
preparedStatement2SqlMap.put((PreparedStatement) advice.getReturnObj(), preparedStatement2SqlMap.put((PreparedStatement) advice.getReturnObj(),
new PreparedStatementSqlContext(String.valueOf(advice.getParams()[0]))); new PreparedStatementSqlContext(String.valueOf(advice.getParams()[0])));
} }
logger.debug("build prepareStatement: {}", advice.getReturnObj());
} }
if ("createStatement".equals(advice.getMethod().getName())) { if ("createStatement".equals(advice.getMethod().getName())) {
@ -342,6 +382,8 @@ class SqlProfilerAdviceListener extends AdviceListenerAdapter {
statement2SqlMap.put((Statement) advice.getReturnObj(), statement2SqlMap.put((Statement) advice.getReturnObj(),
new StatementSqlContext()); new StatementSqlContext());
} }
logger.debug("build statement: {}", advice.getReturnObj());
} }
} }

Loading…
Cancel
Save