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");
}
浙公网安备 33010602011771号