【发布时间】:2012-12-11 14:48:24
【问题描述】:
从 catch 块中抛出异常只是为了记录消息以便我们确定导致异常的原因是否有意义?
代码
public void saveLogs(Logs logs) throws RemoteException
{
try
{
LogsOps.saveLogs(logs);
}
catch (RemoteException e)
{
log.info("RemoteException is thrown while trying to save logs ", e);
throw new RemoteException("RemoteException caused while trying to save", e);
}
}
为了响应下面的其中一个 cmets,此方法会抛出 StackOverFlow 异常,这里是 log.info 的实际实现,它只显示这些错误。
/** Log the message and the exception with a level of INFO.
* @param message - The message text.
* @param t - An exception to display.
*/
public void info(Object message, Throwable t)
{
String nullSafeMessage = (message != null) ? message.toString() : t.getClass().getSimpleName();
log.info(nullSafeMessage, t);
}
所以永远不会抛出 Stackoverflow 异常。
【问题讨论】:
-
堆栈跟踪是否包含来源,并且消息应尽可能具有描述性以避免这种情况。但我已经看到它完成了,很少。除非没有其他东西会记录它。
-
您实际上是在记录异常引发的记录?那将是 StackOverFlow 异常!
-
@TejaswiRana:我没有看到它抛出 StackOverFlow 异常,你为什么认为它会抛出 Stack Over Flow 异常?,请参阅我更新的问题。
-
如果 LogOps.saveLogs(logs) 实际上抛出 RemoteException 它不会被捕获。不过只是好奇-> SaveLogs 中的日志和log.info 中的日志是两个不同的东西?在我看来它们是同一件事,log.info 实际上并没有写入,而是保存到日志集合中,然后以一定的时间间隔保存。
-
log.info 是我们正在使用的标准记录器,而保存日志是应用程序中的页面,它捕获有关每个解析作业请求的解析日志的详细信息,希望这可以澄清。