2010-07-20 12 views
13

NLog를 사용하고 있으며 RichTextBox 및 File에 동시에 로그온하려고합니다. 그리고 xml 구성 파일이 아니라 프로그래밍 방식으로 로거를 구성하려고합니다.NLog를 사용하여 여러 대상에 로그온하는 방법은 무엇입니까?

다음 코드는 마지막 대상 (이 경우 파일)에만 기록합니다. 아무도 도와 줄 수 있니?

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

답변

9

알았어. 알았어. 질문을 게시하기 전에 도움말 파일을 더 읽어야합니다. 그러나 어쨌든, 대답은

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

이 방법은 여전히 ​​하나의 규칙에 당신을 제한하는 규칙을 덮어 씁니다. 제이슨의 대답은 나에게 더 정확 해 보입니다. – GraemeF

7

SimpleConfigurator 기존의 모든 규칙을 덮어 씁니다 ... 다음과 같이 SplitTarget을 사용하는 것입니다. 귀하의 예에서는 2 회의 전화가 있었으므로 첫 번째 대상은 폐기되었습니다.

대신 수동으로 대상 및 로깅 규칙을 추가하고 새로 고침()를 호출해야합니다

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()'가 나에게 적합하지 않습니다; 아무것도 기록되지 않았다. 작동은'var config = new LoggingConfiguration();'이라는 새로운 변수를 선언하고,'config'에서 위 단계를 수행 한 다음'LogManager.Configuration = config; '를 설정합니다. 'Reload'는 Nlog 2.0.0.0을 사용하여 작동하지 않습니다. –

관련 문제