Delphi 现在EurekaLog 7中不推荐使用TEurekaExceptionRecord,是什么替代了LogText?
从EurekaLog 6迁移到7时,我注意到编译器警告说,Delphi 现在EurekaLog 7中不推荐使用TEurekaExceptionRecord,是什么替代了LogText?,delphi,delphi-7,delphi-xe4,eurekalog,Delphi,Delphi 7,Delphi Xe4,Eurekalog,从EurekaLog 6迁移到7时,我注意到编译器警告说,TEurekaExceptionRecord已被弃用,我应该使用TEurekaExceptionInfo 在我的带有EurekaLog 6的Delphi 7应用程序中,有这样一个语句: exceptionRecord : TEurekaExceptionRecord; myString := exceptionRecord.logText; 现在,当我在Delphi XE4和EurekaLog 7中使用TEurekaException
TEurekaExceptionRecord
已被弃用,我应该使用TEurekaExceptionInfo
在我的带有EurekaLog 6的Delphi 7应用程序中,有这样一个语句:
exceptionRecord : TEurekaExceptionRecord;
myString := exceptionRecord.logText;
现在,当我在Delphi XE4和EurekaLog 7中使用TEurekaExceptionInfo
而不是TEurekaExceptionRecord
时,如下所示:
exceptionInfo : TEurekaExceptionInfo;
myString := exceptionInfo.logText;
第二行出现错误,因为
logText
现在不存在。在EurekaLog 7中,哪种方法取代了它?我是EurekaLog支持人员。v6和v7之间有很大的差异。您的问题很难回答,因为虽然您在v6中使用的全局变量仍保留在v7中,但您可能无法在v7中以相同的方式修改或检查它们。成功与否取决于您何时读取或修改变量。有几个事件处理程序,每个处理程序在EL类中读取/写入不同的字段。它们是按顺序调用的,所以这就是我提到的计时问题。日志文本现在在我们的对话框类中创建,但是有一些方法可以从中提取原始日志文本
我建议您在我们的网站上打开一个问题单,并发布一些代码来演示您正在尝试做什么。您还可以查看我们的代码片段库,了解日志管理的想法
EurekaLog 7.7.8.2
Application:
-------------------------------------------------------
1.1 Start Date : Wed, 17 Oct 2018 16:23:33 +0300
1.2 Name/Description: Project1.exe
1.3 Version Number :
1.4 Parameters :
1.5 Compilation Date: Wed, 17 Oct 2018 16:23:15 +0300
1.6 Up Time : 6 second(s) Exception:
------------------------------------------------------------------------
2.1 Date : Wed, 17 Oct 2018 16:23:39 +0300
2.2 Address : 012A03F0
2.3 Module Name : Project1.exe
2.4 Module Version:
2.5 Type : ERangeError
2.6 Message : Range check error at Unit1.Button1Click (Line 261)
2.7 ID : ABBB0630
2.8 Count : 1
...
使用上面提到的一个用例就足够了
然而,当您从EurekaLog 6迁移旧代码时,您需要访问一个简单的bug报告的一个特定示例。错误报告已从OneExceptionNotify
事件中删除,因为错误报告不存在于EurekaLog 7中的异常处理之外(与EurekaLog 6不同)。例如,如果您决定在OnExceptionNotify
事件处理程序中处理异常,则根本不会生成错误报告,从而节省处理时间
如果您仍然需要EurekaLog 6风格的行为,那么可以随时从Dialog.BugReport
属性(基本上是LogBuilder.report
属性的缓存)检索错误报告内容。例如:
uses
EException, // for TEurekaExceptionInfo
ELogBuilder; // for TBaseLogBuilder and RegisterEventEndReportGen
procedure UploadToDB(const ACustom: Pointer;
AExceptionInfo: TEurekaExceptionInfo;
ALogBuilder: TBaseLogBuilder;
var CallNextHandler: Boolean);
var
BugID: Cardinal;
Report: String;
begin
BugID := AExceptionInfo.BugID;
Report := ALogBuilder.Report;
// ... write bug report's content to your DB or
// do whatever you want with it
end;
initialization
RegisterEventEndReportGen(nil, UploadToDB, True);
end.
例如,您应该将OnExceptionNotify
事件处理程序替换为OnEndReportGen
事件处理程序。此事件处理程序的调用方式如下:
- 上传到数据库
- TBaseDialog.SaveBugReport
- TBaseDialog.Execute
- 显示例外
- 进程异常
- 例外管理器.句柄
- Forms.TApplication.HandleException
BuildBugReport
功能随时(根据需要)创建错误报告:
uses
EException, // for TEurekaExceptionInfo
ELogBuilder; // for BuildBugReport
var
EI: TEurekaExceptionInfo;
Report: String;
begin
try
// ...
except
on E: Exception do
begin
EI := ExceptionManager.Info(E);
// EI = nil for disabled EurekaLog
// or when exception is ignored
if Assigned(EI) then
begin
Report := BuildBugReport(EI);
// ... write bug report's content to your DB
// or do whatever you want with it
end;
end;
end;
ExceptionInfo.ToString?@kobik-谢谢你的回复,但我认为用Tostrng替换logText会减少讨论中的日志信息:你用
logText
做什么?@nkp:你为什么不向供应商询问这个问题?