2010-08-18 160 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

在此線程的第二個職位使我的解決方案: http://nlog-project.org/forum.html#nabble-td1685349

你必須得到當前NLOG配置,更改此LoggingConfiguration對象,然後分配回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 2011-05-04 10:14:15

+2

澄清 **具有重新分配的行非常重要:LogManager.Configuration = config; ** 這是因爲NLog爲配置屬性編寫了getter和setter的方式。這並不漂亮,但它必須再次設置一個更改的對象;你不能直接更改屬性。 – zshift 2014-04-18 14:01:55

+0

我不得不在最後重新分配記錄器變量以使其工作: logger = LogManager.GetCurrentClassLogger(); – Henry 2016-07-27 11:05:51