web-dev-qa-db-ja.com

ASP.NET MVC 5(mvcコアではない)プロジェクトでILoggerFactoryを使用できますか?

Asp.net MVC5プロジェクトでログフレームワークを作成したいと思います。私のスタートアップクラスは次のようになります。

public partial class Startup
{
    public void Configuration(IAppBuilder app)
    {
        ConfigureAuth(app);
    }
}

ただし、ASP.Net MVC Coreプロジェクトを見ると、Startupクラスは次のようになっています。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

MVC 5にILoggerFactoryを含めることは可能ですか?これが可能な場合、どのように初期化/登録する必要がありますか? global.asaxまたはStartupで実行する必要があるものですか?

9
Hooman Bahreini

すべての Microsoft.Extensions.*タイプは、ログシステムを含め、ASP.NETCoreの外部で使用できます。実際、これらはASP.NETCoreの一部ではないEntityFrameworkCoreで使用されています。

どのアプリでも使用するには、使用する必要のあるタイプをnew上げて、それらの呼び出しを開始します。魔法のようなものは何もありません。そしてもちろん、ASP.NET Coreアプリにはないため、自動依存性注入(DI)は取得されません(ASP.NET Coreがそれを接続するためです)。

この場合、LoggerFactoryを直接使用し、そこから派生するすべてのAPIを使用するのがおそらく最も簡単です。

実際、Loggingの多くのタイプの単体テストを見ると、DIを使用しない場合と同様のパターンがあります。

https://github.com/aspnet/Logging/blob/9f642fd125b723b0cd3bbfd7d6bb58f7daee233f/test/Microsoft.Extensions.Logging.Test/LoggerTest.cs#L114-L12

このコードは、ロガーファクトリを作成し、ロガープロバイダー(コンソール、EventLog、カスタムなどを使用できます)を追加してから、情報メッセージをログに記録します。

        var loggerFactory = new LoggerFactory();
        var logger = loggerFactory.CreateLogger("Test");

        loggerFactory.AddProvider(new CustomLoggerProvider("provider1", ThrowExceptionAt.None, store));

        // Act
        logger.LogInformation("Hello");
7
Eilon

ここで補足しておきますが、Visual Studio 2015以下を使用している場合、Microsoft.Extensions.Logging Nugetパッケージのインストールで問題が発生する可能性があります。このパッケージにはNugetバージョン4.3.0以降が必要です...

Microsoft.Extensions.Loggingをインストールするには、次のものをインストールする必要があります: https://dist.nuget.org/visualstudio-2015-vsix/v3.6.0/NuGet.Tools.vsix Visual Studio 2015 、またはVisual Studio2017にアップグレードします。

また、Microsoft.Extensions.Loggingは.Net4.5にインストールされないため、.Net4.6.1以降が必要です。

3
Hooman Bahreini