public boolean checkInd() {
int dis_ind = 2;
HashMap parmMap = new HashMap();
//line below can generate errors
getSqlMapClientTemplate().queryForList("authentication.checkInd", parmMap);
List results = (List) parmMap.get("Result0");
HashMap resultMap;
if (result.size()>0)
resultMap = (HashMap)resultMap.get(0);
dis_ind = (Integer)resultMap.get("PK_VALUE");
if (dis_ind == 1)
return true;
else
return false;
}
代码的第5行可能会产生错误。仅举几例,错误可能是......映射中提到的存储过程不存在,映射中提到的列名不存在..等等..
如果我没有发现错误并且出现问题,那么日志跟踪会写在server.log
上,并且web应用程序会停在我web.xml
如果我发现错误,那么网络应用程序不会停在错误页面并继续其快乐的方式(谁知道它现在将停止在哪里)。
所以到现在为止我不想在这里发现错误。
问题是我不想在server.log
中编写堆栈跟踪(现在默认情况下会发生这种情况,如上所述)。相反,我想将堆栈跟踪写入名为myapp.log
的文件(我们使用的是log4j)。但是,我不知道如何在不实际捕获错误的情况下将堆栈跟踪显式写入myapp.log
。下面是我要编写的代码(但是应用程序将不会停止,因为我正在捕获错误并将继续运行,这不是很好)。
OurLogger log = OurLogger.getLogger("myapp", MyClassName.class);
public boolean checkInd() {
int dis_ind = 2;
try {
HashMap parmMap = new HashMap();
//line below can generate errors
getSqlMapClientTemplate().queryForList("authentication.checkInd", parmMap);
List results = (List) parmMap.get("Result0");
HashMap resultMap;
if (result.size()>0)
resultMap = (HashMap)resultMap.get(0);
dis_ind = (Integer)resultMap.get("PK_VALUE");
}
catch (BadSqlGrammarException e) {log.error(e, e.getMessage());}
if (dis_ind == 1)
return true;
else
return false;
}
在这种情况下我有哪些选择以及最佳做法是什么?
PS:这个问题与我的其他question有关,但我试图在这个问题中添加例子并寻求最佳实践建议。
答案 0 :(得分:0)
捕捉不需要是“永久性的”。只需捕获它,记录它,然后重新抛出错误。像这样:
catch (BadSqlGrammarException e) {
log.error(e, e.getMessage());
throw e;
}