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

问题描述 投票:0回答:1

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

来自Windows onstart事件处理程序的信息语句已完全写入日志。

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

已将nlog程序集添加到Windows服务项目:-

nlog assemblies added to the windows-service project

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 event handler:-

的示例代码
   private static NLog.Logger log = LogManager.GetLogger("docLogger");

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

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

请指出我在哪里犯了错误,并且这种混合的日志正在发生。

c# windows-services nlog
1个回答
0
投票

我在Windows服务项目中发现了问题。从项目中的另一个程序集引用中生成了另一个nlog文件。这就是为什么将某些日志语句写入不同的日志文件的原因。由于log是静态对象,是在类级别创建的,而第二个日志对象是在具有不同类作用域的程序集中创建的。但是,日志对象的类型为static,这就是导致此问题的原因。我会说它来自两个不同类别的静态物体污染。

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

© www.soinside.com 2019 - 2024. All rights reserved.