2011-01-13 4 views
4

Ich verwende log4net mit .NET Common.Logging. Ich baute eine Nachricht Muster wie so Verfahren und Klassennamen enthalten:Protokollieren der Methode oder des Klassennamens schreiben Sie immer die Common.Logging-Methode

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level [%M %C] - %message%newline" /> 
</layout> 

Das Problem ist, ich den Namen der Common.Logging Methode und Klasse immer erhalten:

FATAL [Fatal Common.Logging.Factory.AbstractLogger] - log message 
INFO [Info Common.Logging.Factory.AbstractLogger] - log message 
DEBUG [Debug Common.Logging.Factory.AbstractLogger] - log message 

Es ist am unuseful. Gibt es eine Möglichkeit zum Drucken mein Methodenname?

Antwort

3

Ich denke, dass Sie Common.Logging ändern müssen. In der Datei Log4NetLogger.cs ersetzen Sie die folgende Zeile

private readonly static Type declaringType = typeof(Log4NetLogger); 

mit

private readonly static Type declaringType = typeof(AbstractLogger); 

Dies sollte den Trick tun. Here ist eine Erklärung, warum dies funktionieren sollte.

+0

Sie haben Recht. Es gibt einen offenen Fehler für diese Aufgabe: https://sourceforge.net/tracker/index.php?func=detail&aid=3044182&group_id=182424&atid=901156 – HuBeZa

+0

Das Problem wurde am 13.08.2010 geöffnet, ist aber immer noch geöffnet. Protokollierung 2.1.1 –

1

Dieses Format arbeitet mit meiner Config

<layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%-5level [%logger] - %message%newline" /> 
</layout> 

Mein Logger ist definiert als

private static readonly Common.Logging.ILog logger = 
       Common.Logging.LogManager.GetCurrentClassLogger(); 

Ich benutze diese unmodifizierten dlls

  • Common.Logging.dll ver 2.0.0.0
  • Common.Logging.Log4Net.dll ver 2.0.0.0
  • log4net.dll ver 1.2.10

Update: In den Log-Meldungen i den Methodennamen in den Logging-Aufruf als Text hinzufügen, so habe ich keine Performance-Overhead mit dem Call-Stack Analyse den Methodennamen zu erhalten.

+0

Sie haben Recht. Dies löst das Klassennamenproblem. Der Methodenname ist viel größer, zumal ich nicht ständig Reflektionen verwenden möchte, um den Methodennamen zu bekommen - nur wenn ich es so konfiguriere. – HuBeZa

Verwandte Themen