导航

05-003 Logging 之 global::NLog.Logger 实现

Posted on 2015-03-17 18:24  DotNet1010  阅读(209)  评论(0)    收藏  举报

Write 方法的代码:

 public void Write(
                LogLevel logLevel,
                int eventId,
                object state,
                Exception exception,
                Func<object, Exception, string> formatter)
            {
                var nLogLogLevel = GetLogLevel(logLevel); //与NLog 的 LegLevel 进行转换
                var message = string.Empty;
                if (formatter != null)
                {
                    message = formatter(state, exception);     //用户提供的 
                }
                else
                {
                    message = LogFormatter.Formatter(state, exception);  //系统提供的 我这个版本beta3 源码中少了 message =
                }
                if (!string.IsNullOrEmpty(message))
                {
                    var eventInfo = LogEventInfo.Create(nLogLogLevel, _logger.Name, message, exception);
                    eventInfo.Properties["EventId"] = eventId;
                    _logger.Log(eventInfo);
                }
            }

 这个类只是包装了 NLog ;后面会讲讲NLog
 从这个包装类看来 NLog 只能用配置文件来提供配置信息了,没有提供代码编写的接口

关于代码:

           public IDisposable BeginScope(object state)
            {
                return NestedDiagnosticsContext.Push(state.ToString());
            }

 这个实现了在输出信息前面加上 state.ToString() 的功能:

例子如下:

 using (NestedDiagnosticsContext.Push("kota"))
{
          LogManager.GetLogger("A").Debug("c");
          AssertDebugLastMessage("debug", "kota c");
          using (NestedDiagnosticsContext.Push("kopytko"))
          {
               LogManager.GetLogger("A").Debug("d");
               AssertDebugLastMessage("debug", "kota kopytko d");
          }
          LogManager.GetLogger("A").Debug("c");
          AssertDebugLastMessage("debug", "kota c");
}