2016-04-06 7 views
1

ich instanziiert den Logger in jeder Klasse I wie protokollieren wollen dieseNlog nicht Protokollierung der Name des richtigen Logger

private static Logger logger = LogManager.GetCurrentClassLogger(); 

Dann habe ich eine statische Klasse mit mehreren Hilfsfunktionen für die Protokollierung der Logger-Objekt übergeben.

Beispiel für einen einfachen:

public static void LogMessage(Logger logger, LogLevel logLevel, string message) 
    { 
     StringBuilder logMessage = new StringBuilder(); 
     logMessage.AppendLine("Message: " + message); 
     logger.Log(logLevel, logMessage); 
    } 

Das Problem ist, auch wenn ich den Logger in einer anderen Klasse erstellt, protokolliert er den Namen der aktuellen Klasse (die statischen). Ich kann den Namen des Loggers in der Eigenschaftsliste sehen und er hat den richtigen Namen (den Namen der Klasse, in der er instanziiert wurde), wenn er die Log-Methode aufruft. Ich habe versucht, den Logger als ref zu übergeben, aber es macht das Gleiche.

Weiß jemand, warum das passiert?

+0

keine Antwort, aber es klingt wie Sie ganz einfach diese in ein [extensio machen könnte n Methode] (https://msdn.microsoft.com/en-gb/library/bb383977.aspx), so dass Sie einfach 'logger.LogMessage (INFO," msg ");' statt 'Whatever.LogMessage (logger , ... ' –

Antwort

0

Dies ist das erwartete Verhalten. Es gibt einige Lösungen:

  • nur eine statische Logger, jede Klasse erstellen, die recommend ist, oder
  • Verwenden LogManager.GetLogger("loggername") und Ihren Namen übergeben, oder
  • Verwenden fließend Protokollierung, die in NLog enthalten ist, finden news post oder
  • Verwenden Sie die statische Klasse in Fody Anotar: LogTo.Debug("TheMessage");
Verwandte Themen