2012-05-01 92 views
1

事件上下文布局渲染器LogEventInfo参数得到它的参数,例如: http://nlog-project.org/wiki/Event-context_layout_renderer如何在Log方法中一起使用LogEventInfo和LogMessageGenerator/IFormatProvider?

然而LogEventInfo参数仅在日志方法签名的2可供选择:

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

如何传递在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

后面列出的日志方法实际上只是前两种方法中的便捷方法。换句话说,他们只是自己构建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()前进一步自定义记录事件。

相关问题