Exception handling 捕捉DAO中的错误好吗?
第五行代码可能会产生错误。举几个例子,错误可能是…映射中提到的存储过程不存在,映射中提到的列名不存在..等等 如果我没有捕捉到错误并出现问题,那么日志跟踪将写入Exception handling 捕捉DAO中的错误好吗?,exception-handling,glassfish,log4j,Exception Handling,Glassfish,Log4j,第五行代码可能会产生错误。举几个例子,错误可能是…映射中提到的存储过程不存在,映射中提到的列名不存在..等等 如果我没有捕捉到错误并出现问题,那么日志跟踪将写入server.log,web应用程序将在我的web.xml中提到的错误页面停止 如果我发现了错误,那么web应用程序不会在错误页面停止,而是继续它的快乐之路(谁知道它现在会停在哪里) 所以现在我想在这里不要犯错误 问题是我不想在server.log中写入堆栈跟踪(如上所述,默认情况下现在就发生)。相反,我想将堆栈跟踪写入名为myapp.l
server.log
,web应用程序将在我的web.xml
中提到的错误页面停止
如果我发现了错误,那么web应用程序不会在错误页面停止,而是继续它的快乐之路(谁知道它现在会停在哪里)
所以现在我想在这里不要犯错误
问题是我不想在server.log
中写入堆栈跟踪(如上所述,默认情况下现在就发生)。相反,我想将堆栈跟踪写入名为myapp.log
(我们使用的是log4j)的文件。但是,我不知道如何在不捕获错误的情况下将堆栈跟踪显式写入myapp.log
。下面是我将要编写的代码(但应用程序不会停止,因为我捕捉到了错误并将继续运行,这是不好的)
在这种情况下,我的选择是什么?最佳做法是什么
PS:这个问题与我的另一个问题相关,但我已经尝试在这个问题中添加示例,并寻求最佳实践建议 捕捉不需要是“永久的”。只需捕获它,记录它,然后重新显示错误。像这样:
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;
}
捕捉不需要是“永久的”。只需捕获它,记录它,然后重新显示错误。像这样:
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;
}
catch (BadSqlGrammarException e) {
log.error(e, e.getMessage());
throw e;
}