2012-04-02 5 views
3

Jungs. Ich habe eine Frage zur Verwendung von Loggern in log4net. Wenn Sie zwischen Logger pro Klasse (statisches Readonly-Feld) und Logger pro Instanz (Readonly-Feld) wählen, was ist ein besserer Ansatz? Persönlich ist der einzige Nachteil, den ich sehe, wenn Logger pro Klasse aufweisen, ist seine Instanziierung:Log4net: Logger Instanziierung

log4net.LogManager.GetLogger(
     System.Reflection.MethodBase.GetCurrentMethod().DeclaringType 

Es ist nicht sehr schön aussehen, weil die Reflexion. Wenn ich schaffen Logger auf folgende Weise:

log4net.LogManager.GetLogger(typeof(MyClass)) 

gibt es Chancen, die versehentlich ich copy/paste Fehler und statt typeof (MyClass) Ich kann typeof (SomeOtherClass), die Versorgung machen ist Schlecht.

Wenn Logger pro Instanz verwendet wird, kann ich verwenden:

log4net.LogManager.GetLogger(this.GetType()) 

Dieser Ansatz verwendet keine Reflexion und ist von copy/paste fehlerfrei.

Gibt es noch andere Gedanken dazu?

+0

Was meinst du mit ** Es sieht nicht sehr schön wegen der Reflexion **? – sgmoore

Antwort

3

Neben der Tatsache, dass es besser wäre, Abhängigkeitsinjektion zu verwenden, denke ich, dass Ihr Ansatz gut ist. Ich habe diesen Ansatz in der Vergangenheit selbst benutzt.

+0

Welcher? Pro Instanz? Ich habe auch über DIing LogManager nachgedacht. Es würde jedoch bedeuten, dass LogManager grundsätzlich an jede Komponente übergeben werden sollte, indem Konstruktoren dieser Typen einen obligatorischen Parameter hinzugefügt wird, was die Klasse komplizierter macht. Natürlich verstecke ich log4net hinter einer Logging-Abstraktion, aber ich denke, dass das Anwenden von DI hier nicht lohnt, nur weil das Logging ist. – Markus