.Net Core 3.1 在 Microsoft.Extensions.Logger 中使用 Serilog

mtp*_*ltz 3 c# serilog .net-core asp.net-core

在这个应用程序中,我已经引入并设置了 Serilog,它适用于异常,并且我想将 Microsoft 的 Logger 与 Serilog 一起使用,但我似乎无法弄清楚如何在没有此错误的情况下将其 DI 到服务中 dotnet build.

我不确定我缺少什么让 ILogger 使用 Serilog 的实例?

错误dotnet build

[13:56:21 FTL] Host terminated unexpectedly
System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'App.Services.MyService'.) 
Run Code Online (Sandbox Code Playgroud)

服务依赖注入:

[13:56:21 FTL] Host terminated unexpectedly
System.AggregateException: Some services are not able to be constructed (Error while validating the service descriptor 'ServiceType: Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'App.Services.MyService'.) 
Run Code Online (Sandbox Code Playgroud)

执行

using Microsoft.Extensions.Logging;

public class MyService : BaseService
{
    private readonly ILogger _logger;

    public MyService(
        ILogger logger)
        : base(context, httpContext)
    {
        _logger = logger;
    }
    
    // ... Removed for brevity
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*kin 6

ILogger对 DI 不可用。您可以使用以下方法之一:

  1. 注入ILogger<TCategoryName>

     public class MyService : BaseService
     {
         private readonly ILogger _logger;
    
         public MyService(ILogger<MyService> logger)
             : base(context, httpContext)
         {
             _logger = logger;
         }
    
         // ...
     }
    
    Run Code Online (Sandbox Code Playgroud)
  2. 注入ILoggerFactory并使用其CreateLogger方法:

     public class MyService : BaseService
     {
         private readonly ILogger _logger;
    
         public MyService(ILoggerFactory loggerFactory)
             : base(context, httpContext)
         {
             _logger = loggerFactory.CreateLogger("<YOUR_CATEGORY_NAME>");
         }
    
         // ...
     }
    
    Run Code Online (Sandbox Code Playgroud)

我推荐选项#1,除非你想完全控制日志类别。请参阅文档以了解有关这意味着什么的更多信息:

该类别包含在由该实例创建的每条日志消息中ILogger