Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Abhängigkeit zu einer bestimmten Logging-Bibliothek vermeiden
Froggie
myCSharp.de - Member



Dabei seit:
Beiträge: 323

Themenstarter:

Abhängigkeit zu einer bestimmten Logging-Bibliothek vermeiden

beantworten | zitieren | melden

Hallo!
Ich habe da eine eher generelle Frage.
Konkret geht es um eine Logging-Komponente. Ich habe eine gemeinsam genutzte Bibliothek (*.Common.dll). Diese wird in ca. 20 Anwendungen verwendet. Nun wollte ich eine Logging-Funktionalität einbauen. Ich möchte NLog nutzen.
Nun würde ich aber gerne unabhängig von einem konkreten Anbieter bleiben.
Wie kann ich das erreichen?
Muss ich mir umständlich einen eigenen Wrapper schreiben oder gibt es da vielleicht schon was fertiges?
So ein Logger hat ja doch schon einiges an Funtionalität und das alles nochmal zu wrappen ist ganz schön aufwendig.
Wie macht ihr sowas? Seid ihr abhängig von einem Anbieter und nutzt dann immer in jedem Projekt eine referenz auf dessen .dll?
private Nachricht | Beiträge des Benutzers
Somakia
myCSharp.de - Member



Dabei seit:
Beiträge: 269
Herkunft: Hessen

beantworten | zitieren | melden

Wir hier in der Firma nutzen zum loggen die Microsoft Enterprise Library, die hat soweit eigentlich das was wir so brauchen...
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Froggie,

die Frage ist, wie wahrscheinlich ist ein Wechsel von einem Anbieter zu einem anderen multipliziert mit dem Umstellungsaufwand, der dann anfällt, im Vergleich zu dem Aufwand, einen Wrapper zu schreiben, der dann so generell/abstrakt/flexibel ist, dass man ihn später auch tatsächlich auf die Bibliothek eines anderen Anbieters anpassen kann.

Meine Vermutung ist, dass es in der Praxis vorwiegend zwei Lösungen gibt. Entweder from scratch einen eigenen Logger schreiben (das ist viel Aufwand, aber man hat dann auch die volle Kontrolle) oder direkt eine bestimmte Fremdbibliothek verwenden (und sich damit in eine gewissen Abhängigkeit begeben).

herbivore
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.976

beantworten | zitieren | melden

@Froggie:
Welche Funktionalität benötigen denn deine routinen, die dein Logger zur verfügung stellen muss?

Write und WriteLine für verschiedene objekte und das mit verschiedenen Detailgraden.
Das was Du benötigst, packst du in ein ILogger interface, und lässt dir immer den entsprechenden Logger injecten ( einer der grossen vorteile von IOC ).


    public interface ILogger
    {
        enLogLevel DisplayLevel { get; set; }
        void Close();
        void Write(enLogLevel logLevel, string lineToWrite, params object[] para);
        void WriteLine(enLogLevel logLevel, string lineToWrite, params object[] para);
    }
viel mehr brauchen deine Komponenten ja nich tzu wissen.
Nur an der Stelle wo du den konkreten Logger erstellst, muss Du alles hierzu wissen, und da muss ja nichts gewrappt werden.

Schau dir dazu evtl auch mal den CommonServiceLocator an, der kapselt ja auch "beliebige" IOC Container mit einem sehr einfachen interface.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von FZelle am .
private Nachricht | Beiträge des Benutzers
Blacal
myCSharp.de - Member



Dabei seit:
Beiträge: 387

beantworten | zitieren | melden

Hi,

ich persönlich bin einer von der Sorte, der seine eigene Protokoll-Bibliothek implementiert, die dann überall gleich verwendet wird. Zusätzlich gibt es auch ein gemeinsames Auswertetool. Grundsätzlich gebe ich aber herbivore recht, die meistens habens entweder selber gemacht oder nutzen von vorne herein eine Fremdbibliothek.

Ein allgemeines Interface und IOC und solche Sachen finde ich persönlich schon fast etwas übertrieben fürs Logging. In meinen Augen sollte Protokollierung in den eigenen Programmen möglichst überall gleich sein, damit die Auswertung der Protokolle auch überall auf den gleichen Weg geschehen kann. Aber gut, hier denkt vermutlich jeder etwas anders.

Gruß
Roland
private Nachricht | Beiträge des Benutzers
gfoidl
myCSharp.de - Team

Avatar #avatar-2894.jpg


Dabei seit:
Beiträge: 6.828
Herkunft: Waidring

beantworten | zitieren | melden

Hallo Blacal,
Zitat
Ein allgemeines Interface und IOC und solche Sachen finde ich persönlich schon fast etwas übertrieben fürs Logging.
Vom Implementierungsaufwand her ist es ja nicht viel. Aber was gewinnt man dem Interface:
  • keine starrre Abhängigkeit zum Logger
  • es kann der Logger getauscht werden (könnte ja sein)
  • auch das Loggen ist testbar
  • ...
Ich halte es so wei FZelle.


mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 49.486
Herkunft: Berlin

beantworten | zitieren | melden

Hallo zusammen,

was mir gerade noch einfällt: gerade im Zusammengang mit Logging darf man aspektorientierte Programmierung (AOP) nicht unerwähnt lassen. Da dann im Extremfall gar kein Logging Code im Quellcode nötig ist, kann man damit direkt Abhängigkeiten noch besser vermeiden.

herbivore
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

Hallo!

Ich benutze für alle meine Programme ebenfalls eine eigene Logging-Komponente.
Diese baut auf einem Interface auf, für welches dann verschiedene Implementierungen existieren, die auch kombinierbar sind. So kann ich später bei Bedarf z.B. für NLog einfach einen kleinen Wrapper schreiben und schon hab' ich NLog zusätzlich mit im Programm.

Der Grundgedanke war dabei, erstmal eine kleine Protokoll-Komponente zu haben, welche die grundlegenden Logging-Funktionen bereitstellt, ohne Anhängigkeiten zu anderen externen Komponenten.
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
spike24
myCSharp.de - Member



Dabei seit:
Beiträge: 443
Herkunft: Steiermark Österreich

beantworten | zitieren | melden

Wir in der Firma haben einen 'Wrapper' um Log4Net herum gebaut
Ähnlich wie von FZelle beschrieben.
Allerdings haben wir festgestellt, dass wir mit an Sicherheit grenzender Wahrscheinlichkeit den Logger nie austauschen werden und diesen Gedanken würde ich Dir auch ans Herz legen.
Tauscht man wirklich einen Logger so oft aus, dass man einen Wrapper benötigt?
mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen
private Nachricht | Beiträge des Benutzers
tom-essen
myCSharp.de - Experte

Avatar #avatar-2140.png


Dabei seit:
Beiträge: 1.815
Herkunft: NRW

beantworten | zitieren | melden

Hallo!
Zitat von spike24
Tauscht man wirklich einen Logger so oft aus, dass man einen Wrapper benötigt?

Gegenfrage: Ist der dann auftretende Aufwand vertretbar, wenn man - aus welchen Gründen auch immer - den Logger doch mal wechseln muss.

Prinzipiell würde ich auch sagen, dass man den Logger vermutlich nur äusserst selten wechselt. Aber warum sich nicht einmal kurz die Mühe für einen kleinen Wrapper machen, und danach mit der Sicherheit leben, dass man damit sehr viel flexibler ist.
Nobody is perfect. I'm sad, i'm not nobody
private Nachricht | Beiträge des Benutzers
BhaaL
myCSharp.de - Member

Avatar #erP6yAFiewXrJTqrvg6R.jpg


Dabei seit:
Beiträge: 654

beantworten | zitieren | melden

Der Vollständigkeit halber möchte ich mal Common.Logging einwerfen, was im Grunde ja genau der Wrapper ist, der hier gefragt ist.
private Nachricht | Beiträge des Benutzers
spike24
myCSharp.de - Member



Dabei seit:
Beiträge: 443
Herkunft: Steiermark Österreich

beantworten | zitieren | melden

You Ain´t Gonna Need It (YAGNI)

wenn man alles implementiert was man irgendwann vielleich mal benötigt, würde man nie fertig werden.
Klar wenn man nen Logger austauscht hat man dann irgendwann vielleicht mehr arbeit.
Aber wenn man sich an diese Regel hält erspart man sich in summe soviel Zeit, dass sich das widerum locker ausgeht.
Wenn ich diese Regel nicht beachten würde, würde ich noch immer am ORMapper programmieren und nicht den SmartClientLayer.
Aber Vorsicht, sich darüber Gedanken zu machen hat keiner verboten, also nicht unötig den Weg verbauen.
mbg
Rossegger Robert
mehr fragen mehr wissen

Montag morgen ist die beste Zeit um eine erfolgreiche Woche zu beginnen
private Nachricht | Beiträge des Benutzers