Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.094 Beiträge
 
Delphi 12 Athens
 
#1

Optimales Logging: Assert-basiert oder NULL-Logger: Ja oder besser nicht ?

  Alt 17. Dez 2019, 15:32
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 ?
  Mit Zitat antworten Zitat