2010-07-20 10 views
13

Estoy usando NLog y quiero iniciar sesión en RichTextBox y en el archivo al mismo tiempo. Y quiero configurar el registrador programáticamente, no con el archivo de configuración xml.¿Cómo iniciar sesión en varios destinos usando NLog?

El siguiente código solo se registra en el último destino (Archivo en este caso). ¿Alguien puede ayudar?

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"); 

Respuesta

9

Okay I got it. Debería haber leído más el archivo de ayuda antes de publicar la pregunta. Pero de todos modos, la respuesta es utilizar SplitTarget de la siguiente manera ...

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

De esta manera todavía sobrescribe las reglas, limitando a una regla. La respuesta de Jason me parece más correcta. – GraemeF

7

SimpleConfigurator sobrescribe todas las reglas existentes. En su ejemplo, tuvo 2 llamadas, por lo que el primer objetivo se descartó.

En su lugar, se debe añadir manualmente una regla de destino y la explotación forestal y llamar Actualizar():

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()' no funcionó para mí; nada fue registrado Lo que sí funcionó fue declarar una nueva variable 'var config = new LoggingConfiguration();', hacer los pasos anteriores en 'config', luego establecer' LogManager.Configuration = config; '. El 'Recargar' no funciona con Nlog 2.0.0.0. –

Cuestiones relacionadas