如何在Log方法中一起使用LogEventInfo和LogMessageGenerator / IFormatProvider?

时间:2012-05-01 09:47:53

标签: nlog

事件上下文布局渲染器从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中无法做到这一点,可以使用哪些变通方法?

1 个答案:

答案 0 :(得分:1)

您列出的后一种Log方法实际上只是前两种方法。换句话说,他们只是自己构建LogEventInfo。当您使用前两种方法时,为了更好的自定义,您将避免使用方便。

要重新创建便捷方法的功能,您必须使用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()之前继续自定义日志记录事件。