2010-07-20 10 views
13

Ich verwende NLog und möchte gleichzeitig bei RichTextBox und File anmelden. Und ich möchte den Logger programmatisch konfigurieren, nicht mit XML-Konfigurationsdatei.Wie loggen Sie sich mit NLog auf mehrere Ziele ein?

Der folgende Code protokolliert nur das letzte Ziel (Datei in diesem Fall). Kann jemand helfen?

RichTextBoxTarget t1 = new RichTextBoxTarget(); 
t1.Layout = "${date} ${message}"; 
t1.ControlName = "rtb_log"; 
t1.FormName = "MainForm"; 
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(t1, LogLevel.Debug); 

FileTarget t2 = new FileTarget(); 
t2.Layout = "${date} ${level} ${message}"; 
t2.FileName = "${basedir}/Logs/today.log"; 
t2.KeepFileOpen = false; 
t2.Encoding = "iso-8859-2"; 
NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(t2, LogLevel.Trace); 

Logger logger = LogManager.GetLogger("MyLogger"); 

Antwort

9

Okay ich habe es. Ich hätte die Hilfedatei mehr lesen sollen, bevor ich die Frage posten konnte. Aber irgendwie ist die Antwort SplitTarget wie folgt zu verwenden ...

RichTextBoxTarget t1 = new RichTextBoxTarget(); 
t1.Layout = "${date} ${message}"; 
t1.ControlName = "rtb_log"; 
t1.FormName = "MainForm"; 

FileTarget t2 = new FileTarget(); 
t2.Layout = "${date} ${level} ${message}"; 
t2.FileName = "${basedir}/Logs/today.log"; 
t2.KeepFileOpen = false; 
t2.Encoding = "iso-8859-2"; 

SplitTarget target = new SplitTarget(); 
target.Targets.Add(t1); 
target.Targets.Add(t2); 

NLog.Config.SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug); 
Logger logger = LogManager.GetLogger("MyLogger"); 
+0

Auf diese Weise überschreibt immer noch die Regeln, die Sie eine Regel zu begrenzen. Jasons Antwort scheint mir korrekter zu sein. – GraemeF

7

SimpleConfigurator überschreibt alle bestehenden Regeln. In Ihrem Beispiel hatten Sie 2 Anrufe, also wurde das erste Ziel verworfen.

Stattdessen sollten Sie manuell ein Ziel und Logging-Regel hinzufügen, und rufen Reload():

LogManager.Configuration.AddTarget (t1); 
LogManager.Configuration.AddTarget (t2); 
LoggingRule r1 = new LoggingRule ("*", LogLevel.Debug, t1); 
LoggingRule r2 = new LoggingRule ("*", LogLevel.Trace, t2); 
LogManager.Configuration.LoggingRules.Add (r1); 
LogManager.Configuration.LoggingRules.Add (r2); 
LogManager.Configuration.Reload(); 
+0

'LogManager.Configuration.Reload()' funktionierte nicht für mich; nichts wurde protokolliert. Was war Arbeit deklariert eine neue Variable 'var config = new LoggingConfiguration();', die oben genannten Schritte auf 'config', dann Einstellung' LogManager.Configuration = config; '. Das 'Reload' funktioniert nicht mit Nlog 2.0.0.0. –

Verwandte Themen