2

イベントコンテキストレイアウトレンダラーは、LogEventInfoパラメーターからパラメーターを取得します。例: http: //nlog-project.org/wiki/Event-context_layout_renderer

ただし、LogEventInfoパラメーターは、次の2つのLogメソッドシグネチャでのみ使用できます。

     public void Log(Type wrapperType, LogEventInfo logEvent)
     public void Log(LogEventInfo logEvent)

たとえば、他のLogメソッドを使用する場合、LogEventInfoを渡すにはどうすればよいですか。

     public void Log<T>(LogLevel level, IFormatProvider formatProvider, T value)
     public void Log(LogLevel level, LogMessageGenerator messageFunc)
     public void LogException(LogLevel level, [Localizable(false)] string message, Exception ecxception)

これがNLog2.0で不可能であると仮定すると、どのような回避策が利用できますか?

4

1 に答える 1

1

リストした後者のLogメソッドは、実際には最初の2つの便利なメソッドにすぎません。言い換えれば、彼らはLogEventInfo自分自身を構築するだけです。最初の2つの方法を使用すると、カスタマイズを強化するために利便性を回避することになります。

便利なメソッドの機能を再現するには、を少し試してみる必要がありますLogEventInfo

// instead of..
Log<T>(LogLevel level, IFormatProvider formatProvider, T value)
// use:
LogEventInfo.Create<T>(LogLevel level, <log name>, IFormatProvider formatProvider, T value)

// instead of..
Log(LogLevel level, LogMessageGenerator messageFunc)
// use:
if (Log.IsEnabled(level))
    Log.Log(LogEventInfo.Create(level, Log.Name, messageFunc()));

// instead of..
LogException(LogLevel level, string message, Exception exception)
// use:
LogEventInfo.Create(LogLevel level, <log name>, string message, Exception exception)

を使用してこれを行うことのプラス面は、をLogEventInfo呼び出す前に、ロギングイベントをさらにカスタマイズできることですLog()

于 2012-09-27T17:37:19.580 に答える