Ich habe den Thread nicht weiter durchgelesen und kann auch nicht viel schreiben, da ich weg muss. Falls ich also doch das Thema verfehlen sollte oder es schon gesagt wurde: Sry!
Schau dir die globale Variable
RaiseExceptObjProc der
Unit System an. Diese zeigt standardmäßig auf Die Funktion
RaiseExceptObject der
Unit SysUtils. Schreibe deine eigene Funktion dafür, weise sie zu und ruf die alte Methode ebenfalls auf.
Ob das alles so schön und zuverlässig geht weiß ich nicht, hab's nie getestet. Aber einen Versuch ist es wohl wert.
Der Konstruktor einer
Exception ist ungeeignet zum loggen. Denn nur weil eine
Exception, die ja ein normales Delphi-Objekt ist, erzeugt wird, muss sie noch lange nicht ausgeworfen werden. In dem Fall hilft die virtuelle Methode
RaisingException der Klasse
Exception.
Für einen Stacktrace kann man die
Unit JclDebug der JEDIs nutzen. Nutze ich selbst für meine abgeleiteten Exceptions (mit "nested" Funktionalität) und Fehlerberichte, klappt soweit ganz gut.
PS: Das loggen von Fehlern steht auch schon lange auf meiner Todo-Liste
Schönes Wochenende euch allen
Edit:
So, jetzt habe ich Zeit. Ich wollte noch erwähnen, dass man Application.OnException und anderen Events von Application
NICHTS zuweisen sollte! Dafür ist die Komponente
TApplicationEvents (oder irgendwie so heißt sie) da.