2010-08-18 4 views
23

작은 파일 변환 유틸리티를 쓰고 있습니다. 파일을 디렉토리에 놓으면 파일이 자동으로 변환됩니다.NLog에서 런타임 중에 로그 파일 추가/제거

로깅에 NLog를 사용하고 있습니다. NLog.conf을 사용하여 구성한 중앙 로그 파일 외에도 (생성 된 모든 메시지를 수신하는) 각 입력 파일에 대해 하나의 추가 로그 파일을 만들고 비슷한 이름을 사용하는 동안 기록 된 모든 로그 메시지를 포함하고 싶습니다. 변환 프로세스.

런타임 중에 적절한 규칙과 함께 새 파일 대상을 올바르게 추가하는 방법을 알 수없는 것 같습니다. 모든 Logger 개체가 변환 프로세스 중에 새 로그 파일에 쓰길 원합니다.

나는

var logfile = new NLog.Targets.FileTarget(); 
logfile.FileName = fileName + ".log"; 
logfile.KeepFileOpen = true; 
logfile.Initialize(); 
var rule = new NLog.Config.LoggingRule("*", logfile); 
NLog.LogManager.Configuration.LoggingRules.Add(rule); 
NLog.LogManager.ReconfigExistingLoggers(); 
// 
// Proceed with converting file 
// 
logfile.Flush(); 
NLog.LogManager.Configuration.LoggingRules.Remove(rule); 
NLog.LogManager.ReconfigExistingLoggers(); 

처럼 뭔가를 시도하지만 어떤 로그 파일이 생성되지 않았다.

무엇이 잘못 되었나요? 어떤 생각?

답변

47

이 스레드에서 두 번째 포스트는 솔루션를 알려준 : 당신은, 현재 NLog 구성을 얻을이 LoggingConfiguration 객체를 변경할 필요가 http://nlog-project.org/forum.html#nabble-td1685349

, 다시 LogManager.Configuration에 할당합니다.

이 내가 사용하는 코드는 다음과 같습니다

LoggingConfiguration config = LogManager.Configuration; 

var logFile = new FileTarget(); 
config.AddTarget("file", logFile); 

logFile.FileName = fileName + ".log"; 
logFile.Layout = "${date} | ${message}"; 

var rule = new LoggingRule("*", LogLevel.Info, logFile); 
config.LoggingRules.Add(rule); 

LogManager.Configuration = config; 

logger.Info("File converted!"); 
+9

재 할당과 라인이 매우 중요하다 LogManager.Configuration = 설정; – habakuk

+2

명확히하기 ** LogManager.Configuration = config; ** NLog가 Configuration 속성에 대한 getter 및 setter를 작성한 방식 때문에 이러한 현상이 발생합니다. 그것은 꽤 아니지만 변경된 객체로 다시 설정해야합니다. 속성을 직접 변경할 수는 없습니다. – zshift

+0

이 작업을 끝내려면 끝에 로거 변수를 다시 할당해야했습니다. logger = LogManager.GetCurrentClassLogger(); – Henry

관련 문제