2010-08-18 15 views
23

में रनटाइम के दौरान लॉगफाइल जोड़ें/हटाएं मैं एक छोटी फ़ाइल रूपांतरण उपयोगिता लिख ​​रहा हूं। निर्देशिका में गिराए जाने पर फ़ाइलें स्वचालित रूप से परिवर्तित हो जाती हैं।एनएलओजी

मैं लॉगिंग के लिए एनएलओजी का उपयोग कर रहा हूं। एक केंद्रीय लॉग फ़ाइल के अलावा जो 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 = config; – habakuk

+2

** पुन: असाइनमेंट के साथ लाइन बहुत महत्वपूर्ण है: LogManager.Configuration = config; ** यह सच है क्योंकि एनएलओजी ने कॉन्फ़िगरेशन प्रॉपर्टी के लिए गेटर्स और सेटर्स लिखे हैं। यह सुंदर नहीं है, लेकिन इसे एक बदली वस्तु के साथ फिर से सेट करना होगा; आप सीधे संपत्ति नहीं बदल सकते हैं। – zshift

+0

मुझे इसे काम करने के लिए अंत में लॉगर चर को पुन: असाइन करना पड़ा: लॉगर = LogManager.GetCurrentClassLogger(); – Henry

संबंधित मुद्दे