web-dev-qa-db-ja.com

ASP.NET Core 2のログ更新後にILoggerをSerilogのLoggerにマップします

@ nblumhardtpost から:

その後、ぶらぶらしている他のロガー設定を削除できます。appsettings.jsonの「Logging」セクション、AddLogging()の場所、Startup.csのILoggerFactoryによる設定は不要です。

コントローラーで_using Serilog;_およびILoggerの場合、例外が発生します。

_private readonly ILogger _logger;

public CustomersController(ILogger logger)
{
    _logger = logger;
}
_

結果:

要求の処理中に未処理の例外が発生しました。
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();
}
_
8
leon

予想されるタイプをILogger loggerからILogger<CustomersController>ロガーに変更します。

private readonly ILogger _logger;

public CustomersController(ILogger<CustomersController> logger)
{
    _logger = logger;
}
6
Set

ASP.NET CoreのILogger<T>ではなくSerilog独自のILoggerを引き続き使用する場合は、SerilogロガーをIoCコンテナーに登録することもできます。

https://github.com/nblumhardt/autofac-serilog-integration でこれを行うAutofacの統合があります。他のコンテナーにも統合パッケージがある場合があります。

3