Как войти в несколько целей, используя NLog? - PullRequest
13 голосов
/ 20 июля 2010

Я использую NLog и хочу одновременно войти в RichTextBox и File. И я хочу настроить Logger программно, а не с помощью файла конфигурации xml.

Следующий код регистрирует только последнюю цель (в данном случае Файл). Кто-нибудь может помочь?

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

Ответы [ 2 ]

9 голосов
/ 20 июля 2010

Хорошо, я понял.Я должен был прочитать файл справки, прежде чем отправлять вопрос.Но в любом случае, ответ должен использовать SplitTarget следующим образом ...

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");
7 голосов
/ 03 июля 2012

SimpleConfigurator перезаписывает все существующие правила. В вашем примере у вас было 2 вызова, поэтому первая цель была отброшена.

Вместо этого вы должны вручную добавить цель и правило ведения журнала и вызвать 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 ();
...