Unfortunately I am not writing this question from my Developing PC so I might do some mistakes. Please sorry about it…
So – my question – what approach you use to implement error logging in your application?
In web ( http://delphi.about.com ) is nice event handler, but it just copies system error in file, but I would like to expand its capabilities by trapping memory and stack ( and processor information, if I will have time ). Should I aware if I call it dynamically, not adding its component on the form?
procedure TForm1.ApplicationEvents1Exception(Sender: TObject; E: Exception) ;
var
ErrorLogFileName : string;
ErrorFile : TextFile;
ErrorData : string;
begin
ErrorLogFileName := ChangeFileExt(Application.ExeName,'.error.log') ;
AssignFile(ErrorFile, ErrorLogFileName) ;
//either create an error log file, or append to an existing one
if FileExists(ErrorLogFileName) then
Append(ErrorFile)
else
Rewrite(ErrorFile) ;
try
//add the current date/time and the exception message to the log
ErrorData := Format('%s : %s',[DateTimeToStr(Now),E.Message]) ;
WriteLn(ErrorFile,ErrorData) ;
finally
CloseFile(ErrorFile)
end;
//Show the exception
Application.ShowException(E) ;
end;
… and http://delphi.about.com/cs/adptips2001/a/bltip0101_2.htm
As we know, Delphi also provides memory management a bit like C – using ampersands and Pascal functions, but what would be the most effective logging?
Thanks before! Hopefully this topic will be useful to other quality programmers.
Might be worth looking at third party components instead of writing something yourself. Both EurekaLog and madExcept do pretty much exactly what you’re after. Both give great output and have support to connect into bug tracking systems like FogBugz, Mantis and BugZilla. With that you can actually collate the bug reports you’re getting, spot common patterns and hopefully fix bugs quicker.
Personally, installing the Jedi JVCL / JCL is a bit overkill for just it’s exception tracking since it’s a fairly hefty install. Both of the above I’ve mentioned are commercial products, but you get what you pay for.