在我的Java代码中,它检查!null条件并抛出一个Exception。
例如
try
{
if (stud.getCall() != null)
acc.Call = stud.getCall().toString();
else
throw new Exception("Data is null");
}
catch (Exception e)
{
logger.error("Some Error" + e.getMessage());
throw new Exception("Please check the Manatadatory Field is Missing" + e.getMessage());
}但在日志中,我得到了:
Some Error null为什么是e.getMessage null
发布于 2011-11-23 11:56:57
堆栈跟踪将写入日志,而消息将写入标准输出。我的假设是,您没有权限查看stdout被写入的内容,所以现在没有什么可继续进行的。(即使你现在有权看到它,你也有两个不同的东西要拼凑在一起。)
大多数日志库都可以记录堆栈跟踪。这样,您就可以将所有有用的信息放在一起,将异常添加到日志中,而不仅仅是消息,例如
logger.error("caught exception while doing whatever", e);堆栈跟踪具有异常消息,外加指向导致异常的位置的行号,并在此过程中显示每个调用,因此它非常有用。现在您发现并不是所有的异常都包含消息。
如果您要记录的内容不能处理异常堆栈跟踪信息的写入,那么可以使用代码将堆栈跟踪写为字符串here。
发布的代码抛出新异常的方式非常糟糕,因为您丢弃了异常的原始类型,以及原始异常的堆栈跟踪。当你丢弃所有有用的信息时,你怎么能找出哪里出了问题呢?如果您必须捕获异常才能将其记录在这里,那么重新抛出捕获的相同异常,或者将原始异常作为原因传递给新的异常(请查看Throwable构造函数参数),至少这样您不会丢失堆栈跟踪。
您最好使用一个集中的异常处理程序,让它进行日志记录,并让意外的异常在到达处理程序之前不被捕获。因为一旦抛出意外的异常,您的应用程序就处于糟糕的状态,任何依赖于此部件应该完成的操作的后续步骤都将失败,并且您将得到一连串的错误。
发布于 2013-02-25 19:59:49
这就是我修复相同问题的方法,使用下面的代码来查看异常:
"" + e);当原始程序员在没有实现.getMessage();的情况下抛出异常对象时,这将有助于您
我指责谷歌允许getMessage();为空的异常对象
当我的代码获得一个java.lang.NullPointerException时,它随后导致我在e.getMessage();上的异常记录失败
来自.getMessage();的null导致了另一个未处理的异常,并使用强制关闭消息使应用程序崩溃。所以它是这样的:
Log.e("MainLogger.Run.Exception", e.getMessage());我把它改成了这个更正的版本:
Log.e("MainLogger.Run.Exception", "" + e);现在它给了我一个很好的字符串,返回java.lang.NullPointerException
发布于 2012-06-17 09:45:05
这来得太晚了,但我敢打赌,stud是空的,你得到的异常是if (stud.getCall()....的NullPointerException。这是一个没有消息的异常,也就是null。
https://stackoverflow.com/questions/8237080
复制相似问题