Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // If you are using latest (modern) versions of EurekaLog - you can enable run-time debug mode:
- // https://www.eurekalog.com/help/eurekalog/fix_runtime_issues.php
- // Run your application with run-time mode enabled and find newly created run-time log file (.csl file).
- // Open run-time log file and browse / search / filter / organize messages to find:
- // "EurekaLog.Dialog" category and SendBugReport / SendBugReportInternal methods.
- // "EurekaLog.Sending" category and EurekaLogSend function.
- // The send log can be found inside these methods.
- // Alternatively, you may manually log sending as shown below
- // This code example will show you how to capture logging output from bug report sender
- type
- TForm1 = class(TForm)
- Memo1: TMemo;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- end;
- var
- Form1: TForm1;
- implementation
- uses
- EConsts,
- ETypes,
- ELowLevel,
- ESysInfo,
- ECore,
- EDialog,
- ESend,
- EDialogWinAPIMSClassic, // < - replace with your selected dialog
- ESendAPIJIRA, // < - replace with your selected sender
- ECompatibility;
- {$R *.dfm}
- type
- EEurekaSendTestException = class(Exception);
- procedure TForm1.Button1Click(Sender: TObject);
- begin
- raise EEurekaSendTestException.Create('Test exception');
- end;
- //___________ Logging code below ___________
- type
- {$IFNDEF UNICODE}
- UnicodeString = WideString;
- {$ENDIF}
- TELTrackerJIRASender = class(ESendAPIJIRA.TELTrackerJIRASender); // < - replace with your selected sender
- TMSClassicDialog = class(EDialogWinAPIMSClassic.TMSClassicDialog) // < - replace with your selected dialog
- private
- // New stuff for logging:
- FSendLogFile: TStream;
- procedure LogSend(const AMsg: String);
- protected
- // Override sending behaviour
- function SendBugReportInternal: TResponse; override;
- end;
- { TMSClassicDialog }
- function TMSClassicDialog.SendBugReportInternal: TResponse;
- procedure Prepare;
- begin
- // Make sure that we've used LogBuilder before possible async send
- BugReport;
- // Fill necessary information for sending bug report
- Options.CustomField[sifBugAppVersion] := ESysInfo.GetVersionNumber;
- Options.CustomField[sifBugID] := ExceptionInfo.BugIDStr;
- Options.CustomField[sifBugIDSource] := ExceptionInfo.BugIDSource;
- Options.CustomField[sifBugText] := ExceptionInfo.ExceptionMessage;
- Options.CustomField[sifBugType] := ExceptionInfo.ExceptionClass;
- Options.CustomField[sifBuild] := ESysInfo.GetVersionNumber;
- Options.CustomField[sifMachineID] := Options.OverrideComputerName;
- Options.CustomField[sifMessage] := BugReportForSend;
- Options.CustomField[sifOSBuild] := ESysInfo.GetOSBuild;
- Options.CustomField[sifOSType] := ESysInfo.GetOSTypeStr;
- Options.CustomField[sifPlatform] := ESysInfo.GetPlatform;
- Options.CustomField[sifUserEMail] := Options.OverrideUserEMail;
- Options.CustomField[sifStepsToReproduce] := ReproduceText;
- end;
- procedure SendWithLogging;
- var
- ELSender: TELTrackerJIRASender;
- X: Integer;
- begin
- LogFileName := GetFolderTemp + 'CB03001828F84110B1EF17A503B8EEE8.txt';
- DeleteFile(LogFileName);
- try
- FSendLogFile := TFileStream.Create(LogFileName, fmCreate or fmShareExclusive);
- except
- FSendLogFile := nil;
- end;
- try
- if Assigned(FSendLogFile) then
- FSendLogFile.WriteBuffer(BOM_UTF16_LSB, SizeOf(BOM_UTF16_LSB));
- LogSend('Testing send with ' + TELTrackerJIRASender.ClassName + ' on ' + DateTimeToStr(Now)); // <- replace with your selected sender
- ELSender := TELTrackerJIRASender.Create; // <- replace with your selected sender
- try
- ELSender.OnLog := LogSend;
- LogSend(sLineBreak + 'Options:');
- LogSend(ELSender.Options.ToString);
- LogSend(sLineBreak + 'Files:');
- for X := 0 to FilesToSend.Count - 1 do
- LogSend(FilesToSend[X]);
- LogSend(sLineBreak + 'Exception:');
- LogSend(ExceptionInfo.ToString);
- Result := EurekaLogSend(ELSender, Options, FilesToSend, ProgressIndicator, ProcessMessages, GetEnvVariable);
- finally
- FreeAndNil(ELSender);
- end;
- finally
- FreeAndNil(FSendLogFile);
- if FileExists(LogFileName) then
- begin
- ShellExec(LogFileName);
- Sleep(10000);
- DeleteFile(LogFileName);
- end;
- end;
- end;
- begin
- Prepare;
- SendWithLogging;
- end;
- // This implementation will log sending into:
- // 1. File on disk (in TEMP folder);
- // 2. IDE's "Events" window;
- // 3. Memo1 on main form.
- procedure TMSClassicDialog.LogSend(const AMsg: String);
- var
- WS: UnicodeString;
- begin
- if IsDebugged then
- OutputDebugString(PChar(AMsg));
- if Assigned(FSendLogFile) then
- begin
- WS := AMsg + sLineBreak;
- FSendLogFile.WriteBuffer(WS[1], Length(WS) * SizeOf(WideChar));
- end;
- if Assigned(Form1) then
- Form1.Memo1.Lines.Add(WS);
- end;
- initialization
- RegisterDialogClassFirst(TMSClassicDialog); // < - replace with your selected dialog
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement