windows 服务中多个日志文件中的 nLog 信息语句混合

nLog mixing of info statements in multiple log files in the windows service

我在 C#.NET 中有一个 windows-service 项目,带有最新版本的 .NET 框架,我正在尝试在该项目中实施 nLog 4.5.11。 Windows 服务有一个计时器 class,它的事件每 10 秒触发一次。我正在尝试从这些处理程序写入 nLog,但它没有打印在日志文件中。

来自 windows onstart 事件处理程序的信息语句正在完美地写入日志。

在 internalLogFile.log 中进行故障排除后,现在我找到了 nLog Info 的那些行,但是在另一个由其他程序集创建的日志文件中,例如 RabbitMQ.log。我什至没有在 nLog.config 中提及它。我不确定为什么 nLog 会在多个文件中混合内容。

nlog程序集添加到windows-服务项目:-

nLog.config 文件内容:-

    <?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" internalLogFile="C:\Px\log.txt" internalLogLevel="Info">
  <targets>
    <target name="logconsole" xsi:type="Console" />
    <target name="logfile"
            xsi:type="File"
            fileName="${basedir}/Px_LoaderService-${shortdate}.log" />
  </targets>

  <rules>
    <logger name="docLogger" minlevel="Info" writeTo="logfile" />
    <logger name="*" minlevel="Info" writeTo="logconsole" />
  </rules>
</nlog>

InternalLogfile 也没有任何关于丢失写入的错误或信息。

这是 Timer 事件处理程序的示例代码 :-

   private static NLog.Logger log = LogManager.GetLogger("docLogger");

   private void BulkInserts(object sender, ElapsedEventArgs e)
        {
            lock (_locker)
            {
                try
                {

                    log.Info(string.Format("BulkInsert called."));
                }
             }

请指出我在哪里犯了错误&这种混合的日志写入正在发生。

我在我的 windows-服务项目中发现了问题。另一个 nlog 文件是从项目中的不同程序集引用生成的。这就是为什么一些日志语句被写入不同的日志文件的原因。由于日志是静态对象并在 class 级别创建,并且第二个日志对象是在具有不同 class 范围的程序集中创建的。但是日志对象是静态类型的,这就是导致问题的原因。我会说它的静态对象污染来自两个不同的 classes。

现在我已经确定了问题并已解决