事件上下文布局渲染器从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中无法做到这一点,可以使用哪些变通方法?
答案 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()
之前继续自定义日志记录事件。