2017-06-09 2 views
0

.NET CoreのMicrosoft.Extensions.LoggingパッケージからILoggerの独自の実装を作成しましたが、ログに追加するパラメータを追加する方法が不明です。カスタムILogger実装と追加/カスタムフィールド?

現在、私は私のログ方法については、以下のシグネチャを持っている:

public void Log<TState>(
     LogLevel logLevel, 
     EventId eventId, 
     TState state, 
     Exception exception, 
     Func<TState, Exception, string> formatter) 

私はので、これを拡張することができますどのように私は余分なフィールドを渡すことができますか?それはTStateパラメータと関係していますか?

ここでLoggerMessage.Defineメソッドに関する追加情報が見つかりましたhereこれは私が探しているかもしれないように聞こえますが、そこには多くの情報がないようです。

+0

[質問のタイトルのタグを入れないでください](https://stackoverflow.com/help/tagging) – Liam

答えて

1

インターフェイスの実装を記述している場合は、インターフェイスにのみ依存している必要があります。

どの「フィールド」をログに記録するかは、フォーマッタによって決定されます。実装でそれを呼び出し、返された文字列をログに記録します。提供されたフォーマッタがnullの場合、実装内に独自の基本フォーマッタを提供できます。

さらに簡単な実装では、状態のToString()を呼び出すだけで、何らかの種類のシリアライゼーションを行い、結果をログに記録するだけです。しかし、それは、記録されているものを判断するために、呼び出し元からの権限を奪うだろう。

AデバッグLoggerはそのようになります。

public void Log<TState>(LogLevel logLevel, EventId eventId, TState state, Exception exception, Func<TState, Exception, string> formatter) 
    { 
     formatter = formatter ?? ((o, ex) => string.Format("State: {0} - Exception: {1}", o, ex)); 
     Debug.WriteLine(this.Name + string.Format(" {0}: {1} - {2}", logLevel, eventId, formatter(state, exception))); 
    } 
関連する問題