即使autoReload选项为“false”,Nlog也会继续重新加载配置文件

时间:2016-10-28 15:40:57

标签: c# nlog

我使用的是NLog 4.0.1,这是写入日志的代码

    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毫秒内重新加载配置”的消息,但它们不应该在那里(据我所知)

我做错了什么或缺少什么

1 个答案:

答案 0 :(得分: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);
    }