Warum erhalten die meisten log4net-Beispiele den Logger für eine Klasse auf folgende Weise:
private static ILog logger =
LogManager.GetLogger(
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
Anstatt nur typeof (MyClass) zu übergeben:
private static ILog logger = LogManager.GetLogger(typeof(MyClass));
Gibt es einen anderen Grund dafür als die Tatsache, dass Sie für die erste Option keinen bestimmten Klassennamen eingeben müssen?
Ich bin ein NLog-Benutzer und normalerweise läuft dies auf Folgendes hinaus:
Es schien ein bisschen seltsam, dass Sie die Reflexion in Log4Net durchlaufen müssen, also habe ich mir den NLog-Quellcode angesehen, und siehe da, das tun sie für Sie:
Ich denke, ich würde etwas Ähnliches für Log4Net als Erweiterung oder statische Methode schreiben, anstatt die Reflexion als Teil meines Boiler-Codes einzufügen :)
quelle
Wie Sie sagen - es ist praktisch, da Sie einen Logger in einer Methode erstellen können, ohne den Namen der Klasse zu kennen (trivial, wie ich weiß), aber Sie können Methoden zwischen Klassen ausschneiden und einfügen, ohne den Aufruf umbenennen zu müssen.
quelle
Ich denke, der Grund ist, dass Sie den Typ des Laufzeit-Typs mit der
.DeclaringType()
Methode erhalten. Sie können den Logger in einer Basisklasse verwenden und trotzdem den tatsächlichen Typ Ihres Objekts in der Logger-Ausgabe sehen. Das macht Untersuchungen viel bequemer.quelle
Es erleichtert auch das Erstellen von Codesmith-Vorlagen für die Codegenerierung.
quelle