2017-03-02 5 views
5

में एनएलओजी लक्ष्य में एनएलओजी लक्ष्य में बदलें आधारित मेरे पास एनएलओजी का उपयोग कर विंडोज फॉर्म ऐप नेट 4.5 (वीएस 2013) है।प्रोग्रामटाइम

<target name="asyncFileLog" xsi:type="AsyncWrapper"> 
    <target name="logfileTrace" xsi:type="File" fileName="${basedir}/logs/${shortdate}Trace.log" layout="${longdate} ${message}" lineEnding="Default"/> 
</target> 

<target name="asyncFileError" xsi:type="AsyncWrapper"> 
    <target name="logfileError" xsi:type="File" fileName="${basedir}/logs/${shortdate}Error.log" layout="${longdate} ${message} ${exception:format=tostring}" lineEnding="Default"/> 
</target> 

LogManager.Configuration.AllTargets.ToList(); रिटर्न 4 आइटम, नहीं 2 आइटम:

मैं लक्ष्य है।

मैं क्रम में पथ बदल $ {basedir}/लॉग चाहते हैं, प्रोग्राम के रूप में

मैं यह कोशिश:

var rutaLogs = ConfigurationManager.AppSettings["RutaLog"]; 
if (!Directory.Exists(rutaLogs)) return; 

var list = LogManager.Configuration.AllTargets.ToList(); 
foreach (var target in list) 
{ 
    FileTarget fileTarget = null; 
    var wrapperTarget = target as WrapperTargetBase; 

    // Unwrap the target if necessary. 
    if (wrapperTarget == null) 
    { 
     fileTarget = target as FileTarget; 
    } 
    else 
    { 
     fileTarget = wrapperTarget.WrappedTarget as FileTarget; 
     continue; 
    } 

    var value = fileTarget.FileName.ToString(); 
    value = value.Replace("${basedir}/logs/", rutaLogs); 
    fileTarget.FileName = value; 
} 

नहीं कुछ भी उत्पन्न करता है। मैं LogManager.ReconfigExistingLoggers(); का उपयोग करने का प्रयास करता हूं, लेकिन काम नहीं कर रहा हूं।

कोई सुझाव?

उत्तर

7

इस मामले में चर का उपयोग करना आसान है। (${var:...})

इस उदाहरण के लिए:

<variable name="basedir" value="${basedir}" /> <!-- default, optional --> 

<targets> 
    <target name="asyncFileLog" xsi:type="AsyncWrapper"> 
    <target name="logfileTrace" xsi:type="File" 
      fileName="${var:basedir}/logs/${shortdate}Trace.log" 
      layout="${longdate} ${message}" lineEnding="Default"/> 
    </target> 
    ... 

LogManager.ReconfigExistingLoggers(); के लिए सी # में चर बदलने

// create or edit 
LogManager.Configuration.Variables["basedir"] = "d:/mybasedir"; 

कोई ज़रूरत नहीं या सभी लक्ष्यों से अधिक पाशन!

भी देखें ${var} documentation

अद्यतन: इस मामले अपने .Config फ़ाइलों से पढ़ रहे हैं में, यह केवल NLog विन्यास के साथ (! कोई सी # आवश्यक)

स्थापित NLog.Extended और ${appsetting:name=..} का उपयोग किया जा सकता है

उदाहरण

fileName="${var:basedir}/logs/${appsetting:name=RutaLog}Trace.log" 

भी देखें ${appsetting} documentation

+1

वर्क्स का उपयोग कर 'fileName =" $ {var: basedir}/लॉग/$ {shortdate} Trace.log "' और का उपयोग कर काम करता है 'fileName =" $ {appsetting: नाम = RutaLog} $ {shortdate} Trace.log "'। *** $ {appsetting: name = key} *** का उपयोग करना अधिक स्पष्ट रूप से है। – Kiquenet