2016-10-28 8 views
0

Я использую NLog 4.0.1 и это код для записи в журналNlog сохраняет перегрузочное конфигурационный файл, даже если опция автоперезагрузки является «ложной»

public static void LogInfo(string message) 
    { 
     NLog.LogManager.GetCurrentClassLogger().Info(message); 
    } 

А вот NLog.config

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     autoReload="false" 
     throwExceptions="false"> 

    <targets async="true"> 
    <target xsi:type="File" 
      name="default"    
      layout="${longdate} ${message}" 
      fileName="${basedir}/PDF_${shortdate}.log" 
      keepFileOpen="false" 
      /> 
    </targets> 
    <rules> 
    <logger name="*" writeTo="default" minlevel="Info" /> <!-- cambie minlevel="Off" para apagar el log de ventas --> 
    </rules> 
</nlog> 

в файле журнала я до сих пор видел много сообщений о «перечитывания конфигурации в 1 мс», но они не должны быть там (насколько я понимаю)

Что я делаю неправильно или что отсутствует

ответ

0

Оказывается, что другой модуль того же проекта использовал также NLog с другим конфигурационным файлом. Поэтому это правило (*) заставляло других регистрировщиков записывать в файл журнала.

<logger name="*" writeTo="default" minlevel="Info" /> 

Решение было использовать имя в регистраторе

<?xml version="1.0" encoding="utf-8" ?> 
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     autoReload="false" 
     throwExceptions="false"> 

    <targets async="true"> 
    <target xsi:type="File" 
      name="PaymentDetailsTarget"    
      layout="${longdate} ${message}" 
      fileName="${basedir}/PD_${shortdate}.log" 
      keepFileOpen="false" 
      /> 
    </targets> 
    <rules> 
    <!-- Para apagar el log de ventas cambie minlevel="Off" --> 
    <logger name="PaymentDetailsLogger" writeTo="PaymentDetailsTarget" minlevel="Info" /> 
    </rules> 
</nlog> 

И написать войти как это:

private static NLog.Logger PDlogger = NLog.LogManager.GetLogger("PaymentDetailsLogger"); 

    /// <summary> 
    /// Logs an information message using NLOG 
    /// </summary> 
    /// <param name="message">The message to be logged</param> 
    public static void LogInfo(string message) 
    { 
     PDlogger.Info(message); 
    }