2010-08-18 14 views
23

Küçük bir dosya dönüştürme yardımcı programı yazıyorum. Dosyalar bir dizine bırakıldığında otomatik olarak dönüştürülür.NLog içinde çalışma zamanı sırasında günlük dosyaları ekleme/kaldırma

Günlüğe kaydetme için NLog kullanıyorum. NLog.conf (ve üretilen tüm iletiler alır) kullanılarak yapılandırılan bir merkezi günlük dosyasının yanı sıra, her giriş dosyası için benzer bir ada sahip olan ve tüm günlük iletilerini içeren bir ek günlük dosyası oluşturmak istiyorum. Dönüştürme işlemi.

Ne yazık ki, çalışma zamanı sırasında uygun kuralla birlikte yeni bir dosya hedefinin nasıl eklendiğini öğrenemiyorum. Tüm Logger nesnelerinin, dönüştürme işlemi sırasında yeni günlük dosyasına yazılmasını istiyorum.

Ben

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

gibi bir şey denedik ama hiçbir günlük dosyası oluşturuldu.

Neyi yanlış yaptım? Herhangi bir fikir?

cevap

47

bu iş parçacığı üzerinde ikinci sonrası çözüme götürdü: Geçerli, NLog yapılandırmasını olsun bu LoggingConfiguration nesnesine değişiklikler yapmak zorunda http://nlog-project.org/forum.html#nabble-td1685349

, sonra tekrar LogManager.Configuration atayın.

Bu, kullanılan kod:

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

yeniden atanması ile hat çok önemlidir: LogManager.Configuration = yapılandırma; – habakuk

+2

Açıklamak için ** Yeniden atama satırı çok önemlidir: LogManager.Configuration = config; ** Bu, NLog'un Yapılandırma özelliği için alıcıları ve ayarlayıcılarını yazması nedeniyle doğrudur. Güzel değil, ama değiştirilmiş bir nesne ile tekrar ayarlanması gerekiyor; özelliği doğrudan değiştiremezsiniz. – zshift

+0

Bunu çalışmak için aşağıdaki logger değişkenini yeniden atamam gerekiyordu: logger = LogManager.GetCurrentClassLogger(); – Henry

İlgili konular