【发布时间】:2017-06-23 12:04:57
【问题描述】:
我正在使用下面的代码尝试创建自定义错误消息以供 EL 记录。该代码适用于记录自己(即当 {ifNdef EUREKALOG} 时) - 在这种情况下,“(额外信息)”显示在 ShowMessage 中,但在调用 EL 记录时不显示。在后一种情况下,会记录原始 e.message。有没有办法做到这一点?
on e: exception do
begin
e := Exception(AcquireExceptionObject);
e.Message := '(Extra info) ' + e.Message;
{$if defined(EUREKALOG)}
// EExceptionManager.ExceptionManager.ShowLastExceptionData;
// OR
EBASE.HandleException(e);
{$else}
ShowMessage(e.message + ' I got this, thanks!');
{$endif}
ReleaseExceptionObject;
end;
【问题讨论】:
-
我敢打赌,异常管理器一旦提出异常就会收集,而像您这样修改异常消息为时已晚。无论如何,你为什么要这样做?使用额外的信息引发该异常,您就完成了。
-
优秀的答案。如果我(重新)使用
raise exception.create(e.message)而不是EBASE...引发异常,Eurekalog 会按预期捕获新异常。如果你真的用更正的代码回答了这个问题,我会把它标记为答案。 -
所以你只知道那个异常处理程序中的额外信息?重新引发将在日志中创建两个异常条目。我正在考虑使用这些额外信息提出原始异常。
-
其实不是维多利亚。 on e: 异常捕获第一个异常而不涉及 EL。 (重新)引发实际上确实引发了一个新的异常,该异常是由 EL 捕获的已更改的 e.message。这就是为什么你的答案是好的(至少在 Delphi 10.x 上是这样)
-
是的,那么您将记录两个异常。也许LastThreadException 允许您修改记录的异常对象,但我不确定。我猜它仍然被记录,因为它被提升并被钩子抓住了。修改ExceptionMessage 可能是要走的路。