2009-08-03 17 views
9

Ich wickle die Muster & Praktiken Enterprise Library Logging Application Block für eine Anwendung in .NET geschrieben.Singleton Logger, statischer Logger, Werkslogger ... wie logge?

Ich möchte in der Lage sein, eine Loggerunterklasse (d. H. Domänenspezifische Protokollierung).

Was ist der beste Weg, dies zu tun?

Zum Beispiel habe ich eine statische Logger-Klasse im Moment, aber dies erlaubt mir nicht, es für Domain-spezifische Protokollierung zu spezialisieren.

Zum Beispiel

Log(MyDomainObj obj, string msg)

Antwort

12

Check out NLog. Sie nutzen diese Art von Muster:

private static Logger myDomainLogger = LogManager.GetCurrentClassLogger(); 

Sie können dann die Ausgabe spezialisieren basierend auf der Klasse, die myDomainLogger gehört.

Mehr Detail:

class MyDomain 
{ 
    private static Logger _logger = LogManager.GetCurrentClassLogger(); 

    private void SomeFunc() 
    { 
     _logger.Trace("this is a test"); 
    } 
} 

Dann in Ihrer Ausgabe können Sie es Ausgang „MyDomain.SomeFunc“ haben im Rahmen des „Dies ist ein Test“ Nachricht.

5

Auch Kasse log4net. Ich fand die Protokollierung der EL nie so flexibel wie log4net. Ich entschied mich für log4net, da ich log4j bereits kannte.

protected readonly log4net.ILog LOG = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 

es auf diese Weise tun, kann ich Protokolle wie diese:

2009-07-15 09: 48: 51.674 [4420] DEBUG SampleNamespace.SampleClass [(null)] - Beispielnachricht, die Sie ausgeben möchten

4

Sie könnten sogar besser als das tun. Schreiben Sie eine Wrapper-Klasse, die entweder Nlog oder log4net oder whatnot umschließt. Sie können dann diese Wrapperklasse (vielleicht verwenden Sie eine Schnittstelle zu ihr, wenn Sie wirklich Dinge entkoppeln wollen) in Ihrem Code. Auf diese Weise müssen Sie, wenn Sie sich entscheiden, die Logger-Klasse zu ändern, nur eine Klasse ändern und nicht alle Ihre Klassen bearbeiten.

+2

aus einer Design-Sicht ist dies der Weg zu gehen. – Mantzas

+0

Es sind bereits Wrapper wie Common.Logging verfügbar. – Onur