Serilog 在其输出中写入重复的条目

kud*_*ger 6 c# windows-services serilog

我写了一个Windows Service记录它的操作使用Serilog

该应用程序还使用Autofac依赖注入支持和Seq进行结构化日志记录。

 using Autofac;
 public class ContainerInitiator
 {
       public static IContainer BuildContainer()
       {
          var _builder = new ContainerBuilder();
          var logger = LoggerUtility.CreateLogger();
          _builder.RegisterInstance(logger).As<ILogger>().SingleInstance();
          var container = _builder.Build();
          ContainerFactory.SetContainer(container);
          return container;
        }
  }
Run Code Online (Sandbox Code Playgroud)

这是日志实用程序类

public class LoggerUtility
{
    private static string connectionString = ConfigurationManager.AppSettings["applicationName"];
    public static ILogger CreateLogger()
    {
        return GetLoggerConfiguration().CreateLogger();
    }
    private static LoggerConfiguration GetLoggerConfiguration()
    {
        var config = new LoggerConfiguration()
            .ReadFrom.AppSettings();
        config = config.
           Enrich.WithProperty("ApplicationName", connectionString).
           Enrich.WithExceptionDetails().
           Enrich.WithMachineName().
           Enrich.WithProcessId().
           Enrich.WithThreadId().
           ReadFrom.AppSettings();
        return config;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的服务类,它正在记录活动

public class Engine : IEngine
{
      private readonly ILogger _logger;

      public RedistributeEngine(IContainerFactory containerFactory)
      {
           _logger = containerFactory.GetInstance<ILogger>();
      }

       public void Start()
       {
             _logger.Information("Engine started!");
       }
}
Run Code Online (Sandbox Code Playgroud)

正如您在下面的Seq日志中看到的,它同时有两个条目!

在此输入图像描述

Cai*_*ete 7

您正在从 App.Settings 读取配置两次

private static LoggerConfiguration GetLoggerConfiguration()
{
    var config = new LoggerConfiguration()
        .ReadFrom.AppSettings(); // <<<<<<<<<<<< *#*#*#*#*#*#*#*#
    config = config.
       Enrich.WithProperty("ApplicationName", connectionString).
       Enrich.WithExceptionDetails().
       Enrich.WithMachineName().
       Enrich.WithProcessId().
       Enrich.WithThreadId().
       ReadFrom.AppSettings(); // <<<<<<<<<<<< *#*#*#*#*#*#*#*#
    return config;
}
Run Code Online (Sandbox Code Playgroud)

  • 就我而言,我有一个“Log.Logger = new LoggerConfiguration().ReadFrom.Configuration(_configuration).CreateLogger();”和一个“loggerFactory.AddSerilog();”。 (4认同)