Hallo zusammen,
ich bin wieder dabei ziemlich tief in fremde Codes per Logging abzutauchen und große Log-Sitzungen auszuwerten.
Was mich stört ist das sehr schlechte Handling des Loggings unter Delphi.
Leider habe ich noch nicht die perfekte oder zumindest akzeptable Log-Lösung für mich gefunden.
Unter C++ habe ich sehr vielseitige Logger als Makros, was aber unter Delphi leider nicht funktioniert..
Ich müsste unter Delphi dann NULL-Logger anlegen, der Messages in Leere laufen lässt,
aber letztendlich würde der ganze Code doch in der App bleiben, oder nicht ?
Vielleicht ist der Delphi Compiler/Linker clever genug um das rauszurechnen, vielleicht gibt es auch Tricks mit NULL-Logger und Inline Funktionen, ich bin da für Ideen und Vorschläge offen.
Den C++ Makros am nächsten käme eventuell eine Assert-basierte Logging Lösung
- welche Assert nutzt um Log Meldungen abzusetzen (ohne Exception natürlich)
- welche eine Assert-Umleitung einrichtet, um auf den eigentlichen Logger zu zeigen
- welche global Assertions ein/ausschalten kann
- welche in einem Unit, im Header, Assertions individuell ein/ausschalten kann
- welche ohne massive Defines-Frickelei das Logging einfach zentral oder modulweise verwalten,
um den eigentlichen Log-Code immer unangetastet in den Units belassen zu können.
- welche im RELEASE garantiert alle Log-Codes rauswerfen kann
Es gibt sicher für und wider für eine solche Assert-basierte Lösung, z.B.
- das RELEASE ist doch ein anderes wenn man die Log's wieder rausnimmt.
Aber das hat man doch bei IFDEF basierten Logger-Lösung, das wäre doch keine Argument dagegen, oder etwa doch ?
- die "normalen" Asserts werfen dann keine Exceptions mehr (ist das gut oder schlecht ?).
Es könnten sich 3rd Party Libraries seltsam verhalten.
- ein Vorteil wäre man die Logs bequem aktivieren/deaktivieren/eventuell gruppieren könnte (auch ohne zuviele IFDEFs)
- Weil das aber ein ziemlicher Einschnitt in die Delphi-Seele ist, und die Asserts etwas "misbraucht" bin ich mir nicht sicher ob man das so machen sollte, oder besser nicht.
Meine Ziele dafür wären möglichst eine zentrale Verwaltung, möglichst gruppierbar (in den Units oder nach Gruppennamen), es sollte sich natürlich auch unter CrossPlatform gleich verhalten.
Vielleicht könnt Ihr mir da noch etwas auf die Sprünge helfen, um eine optimalere Lösung hinzubekommen ?