12

के बजाय फ़ाइल (d: \ dev) से फ़ाइल लोड करें, मैंने किसी विशेष DLL में लॉगिंग उद्देश्य के लिए Nlog का उपयोग किया था। डीएलएल को तब किसी अन्य एप्लिकेशन में उपयोग किया जाता है (इसे System.Reflection.Assembly.LoadFrom(path + a.dll) का उपयोग करके गतिशील रूप से लोड किया जाता है)। मैंने मैन्युअल रूप से पथ फ़ोल्डर में Nlog.dll और Nlog.config फ़ाइलों को रखा है और एप्लिकेशन ठीक से निष्पादित करता है लेकिन यह किसी भी संदेश को लॉग नहीं करता है।NLog.config फ़ाइल को " bin debug "

हालांकि, जब मैं आगे बढ़ता हूं और अनुप्रयोग निर्देशिका में मैन्युअल रूप से Nlog.config फ़ाइल डालता हूं (\bin\debug\) लॉग संदेश है।

क्या कोई मुझे बता सकता है कि \bin\debug\ के अलावा किसी अन्य निर्देशिका (d:\dev) पर Nlog.Config के लिए खोज स्थान को इंगित करने के लिए कैसे करें।

उत्तर

31

नीचे यह है कि मैंने एनलॉग की कॉन्फ़िगरेशन को इंगित करने के लिए Nlog.config फ़ाइल को इंगित करने के लिए कैसे कॉन्फ़िगर किया।

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true); 
+1

आप पथ। कॉम्बिन (असेंबलीफोल्डर, "NLog.config" का उपयोग कर सकते हैं) – Tempeck

0

एनएलओजी कॉन्फ़िगरेशन को उस फ़ोल्डर में रहने की आवश्यकता है जहां ऐप जो गतिशील रूप से a.dll खींच रहा है, से चल रहा है। यदि आप डिबगिंग कर रहे हैं, तो यही कारण है कि जब आप इसे bin \ debug में डालते हैं तो यह काम करता है। यदि आप विजुअल स्टूडियो का उपयोग कर रहे हैं, तो अपने nlog.config को 'हमेशा कॉपी करें' पर सेट करने का प्रयास करें और इसे जहां जाना चाहिए वहां जाना चाहिए।

+0

उत्तर @jim के लिए धन्यवाद। मैंने Nlog.config को एप्लिकेशन एक्स के प्रोजेक्ट 'ए' में 'कॉपी कॉपी' पर सेट किया था, और यह ऐप एक्स के '\ bin \ debug \' फ़ोल्डर में कॉपी करता है। लेकिन मैं एक पूरे नए एप्लिकेशन में a.dll का उपयोग कर रहा हूं (वाई) और चाहते हैं कि यह ऐप वाई के 'बिन/डीबग' पर जाएं या ऐसे परिवर्तन करें जैसे Nlog.config 'd: \ dev' फ़ोल्डर –

5

एनएलओजी विकी पर Configuration file locations देखें।

असल मायनों NLog config स्थित है:

  • मानक आवेदन विन्यास फाइल (आमतौर पर applicationname.exe.config) आवेदन की निर्देशिका आवेदन के दशक में
  • NLog.config में
  • applicationname.exe.nlog निर्देशिका
  • NLog.dll.nlog एक निर्देशिका में जहां NLog.dll स्थित है (केवल अगर NLog GAC में नहीं है)
  • फ़ाइल नाम NLOG_GLOBAL_CONFIG_FILE द्वारा इंगित किया गया है पर्यावरण परिवर्तनीय (यदि परिभाषित किया गया है, केवल एनएलओजी 1.0 - समर्थन एनएलओजी 2.0 में हटा दिया गया है)

ऐसा करने का कोई और तरीका नहीं है।

+1

में देखा गया है * यह * ऐसा करने का एक तरीका है, [ऊपर देखें ] (http://stackoverflow.com/a/16062987/11635) –

2

मैंने पाया कि

NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true); 

वास्तव में फ़ाइल जो करने के लिए, नहीं कॉन्फ़िग फ़ाइल लॉग इन करने की है करने के लिए लकड़हारा इंगित करता है। यह विशेष रूप से उपयोगी है जब ExcelDNA आदि का उपयोग कर के रूप में XLL विधानसभाओं लोड करता है एक बिटस्ट्रीम के रूप में गतिशील है, और इसलिए

Assembly.GetExecutingAssembly().Location 

- इस बारे में महान बात यह है कि आप ExecutingAssembly पता करने के लिए की जरूरत के बिना लॉग फ़ाइल पथ को परिभाषित कर सकते है एक अपवाद फेंकता है।

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