在ASP.NET Core 2日志更新后将ILogger映射到Serilog的Logger

leo*_*eon 8 c# serilog asp.net-core

来自@nblumhardt帖子:

然后你可以继续删除任何其他记录器配置:appsettings.json中不需要"Logging"部分,任何地方都不需要AddLogging(),也不需要通过Startup.cs中的ILoggerFactory进行配置.

当我using Serilog;ILogger我的控制器时,我得到一个例外.

private readonly ILogger _logger;

public CustomersController(ILogger logger)
{
    _logger = logger;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

处理请求时发生未处理的异常.
InvalidOperationException:尝试激活"Customers.Api.Controllers.CustomersController"时无法解析类型"Serilog.ILogger"的服务.

我还需要在Startup.ConfigureServices()方法中向DI提供一些信息吗?

据我所知,我的课程课程遵循帖子中的说明.

public class Program
{
    public static void Main(string[] args)
    {
        Log.Logger = new LoggerConfiguration()
            .MinimumLevel.Debug()
            .MinimumLevel.Override("Microsoft", LogEventLevel.Information)
            .Enrich.FromLogContext()
            .WriteTo.Console()
            .CreateLogger();

        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .UseStartup<Startup>()
            .UseSerilog()
            .Build();
}
Run Code Online (Sandbox Code Playgroud)

Set*_*Set 6

将预期类型从记录器更改ILogger loggerILogger<CustomersController>:

private readonly ILogger _logger;

public CustomersController(ILogger<CustomersController> logger)
{
    _logger = logger;
}
Run Code Online (Sandbox Code Playgroud)

  • @leon调查[为什么ASP.NET Core DI知道如何解析ILogger &lt;T&gt;,而不是ILogger?](/sf/ask/2677853741/如何解决iloggert但不是ilogger) (2认同)