【问题标题】:Now that TEurekaExceptionRecord is deprecated in EurekaLog 7, what replaces LogText?既然 TEurekaExceptionRecord 在 EurekaLog 7 中已被弃用,那么什么取代了 LogText?
【发布时间】:2013-09-23 09:40:32
【问题描述】:

在从 EurekaLog 6 迁移到 7 时,我注意到编译器警告 TEurekaExceptionRecord 已弃用,我应该使用 TEurekaExceptionInfo

在我的带有 EurekaLog 6 的 Delphi 7 应用程序中,有如下语句:

exceptionRecord : TEurekaExceptionRecord; 
myString := exceptionRecord.logText;

现在,当我在带有 EurekaLog 7 的 Delphi XE4 中使用 TEurekaExceptionInfo 而不是 TEurekaExceptionRecord 时,如下所示:

exceptionInfo : TEurekaExceptionInfo;
myString := exceptionInfo.logText;

第二行出现错误,因为logText 现在不存在。在 EurekaLog 7 中哪个方法取代了它?

【问题讨论】:

  • ExceptionInfo.ToString?
  • @kobik - 感谢您的回复,但我认为将 logText 替换为 Tostrng 会根据此讨论减少日志信息:news.eurekalog.com/showthread.php?t=3248
  • 你在用LogText做什么?
  • @nkp:你为什么不问供应商?

标签: delphi delphi-7 delphi-xe4 eurekalog


【解决方案1】:

我是 EurekaLog 支持人员。 v6 和 v7 之间存在很大差异。您的问题很难回答,因为虽然您在 v6 中习惯的全局变量仍保留在 v7 中,但您可能无法在 v7 中以相同的方式修改或检查它们。成功取决于何时您读取或修改变量。有几个事件处理程序,每个处理程序读取/写入我们 EL 类中的各种字段。它们是按顺序调用的,所以这就是我提到的时间问题出现的地方。日志文本现在在我们的对话框类中创建,但有一些方法可以从中提取原始日志文本。

我建议您在我们的网站上打开故障单并发布一些代码来演示您正在尝试执行的操作。您还可以查看我们的代码 sn-ps 库以了解日志管理的想法。

【讨论】:

    【解决方案2】:
    1. 如果您正在寻找获取一般异常信息(类、消息、地址等) - 请参阅How to get exception information?
    2. 如果您正在寻找获取异常的调用堆栈 - 请参阅 How to get exception's call stack?
    3. 如果您正在寻找将报告文件保存到数据库或网络共享中(带有屏幕截图、附件、网页、转储等) - 请参阅How to save report instead of sending?
    4. 如果您想对错误报告文件进行操作 - 请参阅How to get file name for the bug report?

    通常您不需要访问错误报告:

    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 迁移旧代码时,您想要访问简单错误报告的一个特定示例。错误报告已从 OnExceptionNotify 事件中删除,因为错误报告在 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.
    

    例如你应该用OnEndReportGen 事件处理程序替换你的OnExceptionNotify 事件处理程序。这个事件处理程序将被这样调用:

    • 上传至数据库
    • TBaseDialog.SaveBugReport
    • TBaseDialog.Execute
    • 显示异常
    • 进程异常
    • ExceptionManager.Handle
    • 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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-09-23
      • 1970-01-01
      • 2017-12-14
      • 1970-01-01
      • 2015-12-09
      • 1970-01-01
      • 2015-02-27
      • 2016-01-25
      相关资源
      最近更新 更多