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)

假设这在 NLog 2.0 中是不可能的,有哪些变通方法可用?

4

1 回答 1

1

您列出的后一个 Log 方法实际上只是前两个的便捷方法。换句话说,他们只是LogEventInfo自己构造 s。当您使用前两种方法时,您为了更好的定制而绕过了便利。

要重新创建便捷方法的功能,您必须使用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 回答