2011-09-07 19 views
9

मैंने एनएलओजी के लिए फ़ाइल लक्ष्य को निम्नानुसार कॉन्फ़िगर किया है:मैं एनएलओजी लॉग फ़ाइल के पथ से कैसे पूछ सकता हूं?

<targets> 
    <target name="asyncFile" xsi:type="AsyncWrapper"> 
    <target xsi:type="File" name="logfile" fileName="${basedir}/Logs/${shortdate}.log" 
      layout="${longdate} ${uppercase:${level}} ${message}" /> 
    </target>  
</targets> 

मैं इस File लक्ष्य के वास्तविक फाइल सिस्टम पथ (fileName) को एनएलओजी के एपीआई के माध्यम से कैसे पूछ सकता हूं?

+0

आपकी आवश्यकता क्या है? आपको पथ जानने की आवश्यकता क्यों है? – ccellar

+3

@ कैलरर यह दिलचस्प है क्योंकि मुझे यह नहीं पता कि '$ {basedir} 'का मूल्यांकन क्या है। – aknuds1

उत्तर

8

मैंने इस जानकारी को configuration api के माध्यम से प्राप्त करने का प्रयास किया है।

enter image description here

दुर्भाग्य से यह विन्यास की तरह वास्तविक लक्ष्य से मूल्यांकन किया जाता है और विन्यास में हल नहीं होती है लग रहा है।

{basedir} एपडोमेन बेस निर्देशिका को संदर्भित करता है जिसे आप आसानी से इस मूल्य को पढ़ सकते हैं।

var basedirPath = AppDomain.CurrentDomain.BaseDirectory; 
0

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

Private MainNlogConfig As New LoggingConfiguration() 
Dim localrule As New LoggingRule(*, LogLevel.Info, locallogtarget) 
MainNlogConfig..AddTarget("file", locallogtarget) 

With locallogtarget 
    .Layout = "${longdate} ${logger} ${message}" 
    .FileName = appdir & appName & ".log" '----->LOOK HERE! 
End With 
LogManager.Configuration = MainNlogConfig 
8
private string GetLogFile() 
    { 
     var fileTarget = LogManager.Configuration.AllTargets.FirstOrDefault(t => t is FileTarget) as FileTarget; 
     return fileTarget == null ? string.Empty : fileTarget.FileName.Render(new LogEventInfo { Level = LogLevel.Info }); 
    } 
संबंधित मुद्दे