ASP.NET Coreにはロギングのサポートが組み込まれていますが、ドキュメントには、ILogger
依存性注入を介して要求することによって、つまりController
コンストラクターに引数として追加することによって、ロギングを実行する必要があると記載されています。
コード全体でメソッドシグネチャまたはコンストラクターをILogger
引数で汚染することは、この横断的関心事に対する間違った解決策のように感じます。Androidでは、Log
クラスは静的であるため、コードの任意の部分からログを記録するのは簡単です。
コントローラ以外の場所からロギングを行うための良い方法は何でしょうか?
コンポーネントでのロギングの使用について:
アプリケーションのコンポーネントにログを追加するには、
ILoggerFactory
またはILogger<T>
依存性注入を介してを要求します。場合はILoggerFactory
、要求され、ロガーは、その使用して作成されなければならないCreateLogger
方法を。
あなたの場合はCustomClass
、データコンテナ(DTOクラス)で、それは伐採について知っているが、データだけを含めることはできません。
「Service」、「Provider」、「Handler」などの名前を持つ他のクラスの場合、ベストプラクティスは、依存性注入を使用してインスタンスを解決することです。一般に、DIはオブジェクトとそのコラボレーターまたは依存関係の間の疎結合を実現するための手法であるため、可能な限りDIを使用する必要があります。詳細については、次の質問が興味深いかもしれません:依存性注入または静的ファクトリを使用する必要がありますか?
したがってILogger<CustomClass>
、.NET Coreはデフォルトでコンストラクターの挿入のみをサポートしているため、コンストラクターに追加するだけです(コントローラーの場合と実際には同じ方法です)。
public class CustomClass
{
private readonly ILogger _logger;
public CustomClass(ILogger<CustomClass> logger)
{
_logger = logger;
}
}
ASP.NET Coreの組み込みの依存性注入コンテナーは、一時的な依存性を自動的に解決します。したがって、コントローラーに、何かをログに記録A
するクラスを使用する依存関係としてクラスB
がある場合、コードは次のようになります。
public class MyController
{
public MyController(ClassA classA)
{ ... }
}
public class ClassA
{
public ClassA(ClassB classB)
{ ... }
}
public class ClassB
{
private readonly ILogger _logger;
public ClassB(ILogger<ClassB> logger)
{
_logger = logger;
}
public void DoSomethingWithLogging()
{
// use _logger
}
}
メソッドをStartup
使用IServiceCollection.Add…
する際には、依存関係も登録する必要があることに注意してください。
public void ConfigureServices(IServiceCollection services)
{
// ...
services.AddTransient<ClassB>();
services.AddTransient<ClassA>();
}
組み込みのロギングサポートは、.NET Coreが、ロギングに組み込みの抽象化を認識して使用していることを意味します。これは主にILoggerFactory
とILoggerProvider
インターフェイスによって行われます。
/// <summary>
/// Represents a type used to configure the logging system and create instances of <see cref="ILogger"/> from
/// the registered <see cref="ILoggerProvider"/>s.
/// </summary>
public interface ILoggerFactory : IDisposable
// <summary>
/// Represents a type that can create instances of <see cref="ILogger"/>.
/// </summary>
public interface ILoggerProvider : IDisposable
独自のILoggerProvider
実装を使用して、必要なことを実行できる独自のロガーを追加できます。実例として、NLogロガーの実装を確認できます。
のおかげでILoggerFactory
、プロジェクト固有の目的でロガーを簡単に構成できます。
あなたのASP.NETコアアプリケーションでのconfigureログには、次のように解決すべき
ILoggerFactory
でConfigure
、あなたの方法Startup
クラス。ILoggerFactory
このタイプのパラメーターをConfigure
メソッドに追加すると、ASP.NETCoreは依存性注入を使用するインスタンスを自動的に提供します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加