ASP.NET Core WEB APIからカスタムロガーを開発する必要があります。ログレコードはすぐ先のメディアに書き込むべきではありませんので、私は標準のロギングインフラストラクチャを使用したい は、しかし、私は必要なものを、少し異なっているが、私はASP.NET COREカスタムロガーは、リクエストごとに1回データベースに保存します。
- が要求ごとに新しいロガーを作成する必要がありますメモリ
- で、この要求の
- コレクトログレコードは、そのアクションまたはときに例外が表示されるの終わりにデータベースに1つのレコードとして要求のすべてのレコードを保存します。 (ILoggerですを実装し、内部のStringBuilder + 1つの追加方法保存にレコードを保存)私はASP.NETコアに非常に新しいですので、私はDBLoggerを作成し、いくつかのチュートリアルに従っ
、コンフィギュレーション、プロバイダ、拡張子、私が登録それはスタートアップで動作しますが、データベースへの保存である最後のステップはありません。それはこの
public class ValuesController : Controller
{
private readonly ILogger<ValuesController> _logger;
public ValuesController(ILogger<ValuesController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogWarning("TestWarning");
_logger.LogInformation("TestInfo");
return new string[] { "value1", "value2" };
}
のように見えるように、コントローラで は、私は、ロガーを取得するためにDIを使っだから私は今、ログ・レコードを書き込むことができますが、どのように私は(特定のロガーの追加(カスタム)機能を呼び出すことができますこの場合、私のDBLoggerのSave()メソッド)?私のコントローラの_loggerプロパティは、アプリケーションで内部的に使用されるすべてのロガーへの参照を保持しますが、コードからコレクションにアクセスすることはできません。
この質問は、一般的に次のようなものでもあります。カスタムILoggerのカスタム機能をコードでどのように使用することができますか。または、カスタムロガーへの参照を取得するにはどうすればよいですか?
[編集] これは私がDIによって受け取るものを、私のタイプ(DBlogger)ではありませんが、私は含ん型Microsoft.Extensions.Logging.Loggerの非公有財産_loggerを含む、Microsoft.Extensions.Logging.Loggerを取得私のロガーを含むロガーの非公開のコレクション(写真を参照)。しかし、あなたがする必要がある。この場合
private readonly dynamic _logger;
を:だから、私はそれを感謝
フィリップ
してくださいにどんなのparamsを渡します。私はILOggerで自分のタイプを取得しませんが、私は非公開のアクセスでより複雑な構造になります。提案したアプローチをどのように使用できますか? –