【问题标题】:SeriLog in Asp.Net Core web app does not inject dependency properlyAsp.Net Core Web 应用程序中的 SeriLog 未正确注入依赖项
【发布时间】:2018-06-16 04:38:53
【问题描述】:

Startup.cs Configure() 方法中,我设置了如下记录器:

        Serilog.Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Verbose()
            .Enrich.FromLogContext()
            .WriteTo.RollingFile(new CompactJsonFormatter(), "c:\\temp\\myapp.json")
            .CreateLogger();

        loggerFactory.AddSerilog(Serilog.Log.Logger);

ILogger 和 Log.Logger 始终评估为 Serilog.Core.Pipeline.SilentLogger 而不是设置的内容。我是否错过了设置 DI 的任何步骤?

【问题讨论】:

    标签: asp.net-core serilog


    【解决方案1】:

    这可能发生在某些 Autofac 场景中,其中调用了 builder.RegisterLogger(); 方法而不传递 ILogger,但由于某种原因 AutofacSerilogIntegration 无法检测到先前创建的记录器。

    如果你有一个ILogger 实例,你可以像这样显式地将它传递给容器构建器:

    builder.RegisterLogger(logger);
    

    其中 logger 是 ILogger 实现。

    【讨论】:

      【解决方案2】:

      为了让我的工作,我必须调用 AddProvider 方法。

      有点像这样:

              /* ok, need to get ILoggerFactory, i don't like this call to BuildServiceProvider, but that's what I had to do for my console-app (dotnetcore, not aspnetcore) */
              ILoggerFactory ilf = servColl.BuildServiceProvider().GetService<ILoggerFactory>();
      
      
              /* now create the SerilogLoggerProvider */
              Serilog.Extensions.Logging.SerilogLoggerProvider seriprovider = new Serilog.Extensions.Logging.SerilogLoggerProvider(serilogger, false);
              /* now cast the SerilogLoggerProvider to ILoggerProvider */
              Microsoft.Extensions.Logging.ILoggerProvider castSerilogger = seriprovider as Microsoft.Extensions.Logging.ILoggerProvider;
      
              /* now register the castSerilogger */
              ilf.AddProvider(castSerilogger);
      

      上面是这样一个不太流畅的版本:

      https://andrewlock.net/adding-serilog-to-the-asp-net-core-generic-host/

      https://github.com/serilog/serilog-extensions-hosting

      如果上述链接失败,这里有一些面包屑

      "public class SerilogLoggerFactory : ILoggerFactory"
      
      "_provider = new SerilogLoggerProvider(logger, dispose);"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-24
        • 1970-01-01
        • 2018-01-16
        • 2019-02-22
        • 1970-01-01
        • 1970-01-01
        • 2017-01-30
        • 1970-01-01
        相关资源
        最近更新 更多