AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Open Source "Logging Facade" für Pascal auf Github
Thema durchsuchen
Ansicht
Themen-Optionen

Open Source "Logging Facade" für Pascal auf Github

Ein Thema von mjustin · begonnen am 27. Jan 2016 · letzter Beitrag vom 7. Feb 2016
Antwort Antwort
Seite 1 von 2  1 2      
mjustin
Registriert seit: 14. Apr 2008
Unter https://github.com/michaelJustin/slf4p entwickle ich seit kurzem eine Open Source Bibliothek zur Integration von Logging Frameworks über eine Abstraktionsschicht ('Facade').

Wer schon mal schnuppern möchte, kann nun den Source Code und DUnit Tests von Github herunterladen. Für die Unit Tests wird das Log4D Open Source Framework benötigt, das auf Sourceforge gehostet wird.

Da die Logging Facade auch in einem oder zwei meiner anderen Projekte eingesetzt werden soll, wird unter anderem auch Free Pascal Unterstützung und FPCUnit Tests folgen.

Die Bibliothek steht unter der Apache 2.0 Lizenz. Über Vorschläge, welches (Open Source-) Logging Framework noch integriert werden sollte, freue ich mich natürlich.
 
mquadrat

 
Delphi XE2 Professional
 
#2
  Alt 27. Jan 2016, 16:32
Werde ich mir mal anschauen. Ich sehe zwar nicht, dass wir in absehbarer Zeit von Log4D weg wechseln, aber die Möglichkeit zu haben kann ja nie schaden. Wobei ich aktuell ehrlich gesagt, auch nicht wüsste, wohin wir wechseln sollten
  Mit Zitat antworten Zitat
Rollo62

 
Delphi 12 Athens
 
#3
  Alt 29. Jan 2016, 12:25
Sieht interessant aus,

aber was ich mich bei dem Thema immer frage:
Gibt es in Delphi eigentlich die Möglichkeit eine "leere" Prozedur zu definieren,
als Beispiel mal das Object.Free

Delphi-Quellcode:
procedure TObject.Free;
begin
// under ARC, this method isn't actually called since the compiler translates
// the call to be a mere nil assignment to the instance variable, which then calls _InstClear
{$IFNDEF AUTOREFCOUNT}
  if Self <> nil then
    Destroy;
{$ENDIF}
end;
So das man beim Aufruf nicht immer hier reinspreingen muss, wenn nichts drin steht.

Also Obj.Free; wird doch immer aufgerufen, mit ein paar Zeilen Assembler für in- out-management.

Aber schön wäre doch eine Debug Prozedur die gar nicht erst kompiliert wird, oder wenigstens ein nop,
(natürlich ohne Fehlermeldungen), wenn das DEBUG Define nicht vorhanden ist.

Ich denke da an soetwas wie die Defines/Macros von CPP, diese werden beim PreCompiler einfach ignotiert
wenn nichts drinsteht.

Also
bei DEBUG Define:
Log.Debug('Blah'); // wird aufgerufen und macht ihr Ding

ohne DEBUG Define:
Log.Debug('Blah'); // wird einfach ignoriert, und muss nicht erst rein- rausgesprungen werden

Geht das, evtl. mit Interfaces ?


Rollo
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

 
Delphi 12 Athens
 
#4
  Alt 29. Jan 2016, 12:51
Du kannst so etwas mit inline erreichen. Ohne das DEFINE Log sieht man schon keinen blauen Punkt for dem Log-Aufruf in Main.

Delphi-Quellcode:
unit Unit58;

interface

procedure Log(AText: string); inline;

implementation

{.$DEFINE Log}

procedure Log(AText: string);
begin
  {$IFDEF Log}
  Writeln(AText);
  {$ENDIF}
end;


end.
Delphi-Quellcode:
uses
  Unit58 in 'Unit58.pas';

procedure Main;
begin
  Log('Hallo Welt');
  Writeln('Wie geht''s?');
  Readln;
end;
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#5
  Alt 29. Jan 2016, 16:42
Geht das, evtl. mit Interfaces ?
Interfaces bringen nunmal ein virtuellen Methodenaufruf mit sich, darum kommst du nicht herum.
Einfach nen Nullobjekt dahinter hauen, und fertig.
Die Performancebeeinflussung dafür ist imo nur theoretischer Natur.
Stefan
  Mit Zitat antworten Zitat
mjustin

 
Delphi 2009 Professional
 
#6
  Alt 29. Jan 2016, 16:44
Du kannst so etwas mit inline erreichen. Ohne das DEFINE Log sieht man schon keinen blauen Punkt for dem Log-Aufruf in Main.
Leider funktioniert das hier bei Delphi 2009 nicht im Fall von Interface - Methoden, der blaue Punkt bleibt bestehen:

Delphi-Quellcode:
program Project201601291;

{$APPTYPE CONSOLE}

type
  ITest = interface['{76BA1F8A-D171-4817-BB3D-337295B03CE0}']
    procedure Log;
  end;

  TTest = class(TInterfacedObject, ITest)
  public
    procedure Log; inline;
  end;

var
  T: ITest;

procedure TTest.Log;
begin
end;

begin
  T := TTest.Create;
  T.Log;
end.
Michael Justin
  Mit Zitat antworten Zitat
mjustin

 
Delphi 2009 Professional
 
#7
  Alt 29. Jan 2016, 17:06
Werde ich mir mal anschauen. Ich sehe zwar nicht, dass wir in absehbarer Zeit von Log4D weg wechseln, aber die Möglichkeit zu haben kann ja nie schaden. Wobei ich aktuell ehrlich gesagt, auch nicht wüsste, wohin wir wechseln sollten
Das kann ich - nach Recherche der freien (open source) Logging Frameworks für Delphi und Free Pascal - nur unterstreichen

Log4D ist aktuell auch die einzige Bibliothek die ich rundum empfehlen kann (Log4Delphi hat beim ersten Versuch in eine Datei zu loggen bereits einen E/A Fehler 32 geworfen).

p.s. zu Log4D: falls darin Bugs entdeckt und gefixt wurden, bin ich gerne bereit diese in meinem Fork zu integrieren. Es sollten aber nur die allerkritischsten Bugs in der Haupt-Unit (Log4D.pas) sein, mein Zeitbudget ist etwas beschränkt.
Michael Justin
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

 
Delphi 10.1 Berlin Enterprise
 
#8
  Alt 29. Jan 2016, 17:52
Für mich persönlich gilt: SmartInspect or no logging Ich kann diese ganzen Textfile basierten Logging Dinger nich ausstehen. Auch wenn sie html und schießmichtot Formatierung anbieten.

P.S. Scheint wir hatten in Spring4D vor einiger Zeit mal dieselbe Idee - eventuell können wir unsere Bemühungen ja kombinieren.
Stefan

Geändert von Stevie (29. Jan 2016 um 17:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

 
Delphi 12 Athens
 
#9
  Alt 29. Jan 2016, 19:13
Leider funktioniert das hier bei Delphi 2009 nicht im Fall von Interface - Methoden, der blaue Punkt bleibt bestehen:
Das ist in der Tat so, denn die Interface-Methode ist ja auch nicht inline (wie auch). Da kann der Compiler nicht anders und ruft das dann eben auf.
Uwe Raabe
  Mit Zitat antworten Zitat
mquadrat

 
Delphi XE2 Professional
 
#10
  Alt 30. Jan 2016, 08:45
Als ich den Post gesehen habe, habe ich auch erst mal an http://www.php-fig.org/ gedacht. In so einem Projekt kann man wunderbar übergreifende Interfaces entwickeln. Dazu dann noch eine Art Selbstverpflichtung für OpenSource Packages ala https://thephpleague.com/de/ und Delphinus-Support.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz