抱歉,NLog没有此功能的内置目标。但你可以很容易地实现这一点!基于
我正在寻找一种方法,在发生错误时转储跟踪级别日志记录的尾部(以及向上)。
有办法做到这一点吗?
CompoundTargetBase
类创建自定义目标!
这里是我的简单原型:
class TracedErrorTarget : CompoundTargetBase
{
private int _head;
private LogEventInfo[] _traceTail; // ring buffer
protected override void Write(LogEventInfo logEvent)
{
if (logEvent.Level == LogLevel.Trace)
{
SaveTrace(logEvent);
return;
}
if (logEvent.Level == LogLevel.Error)
{
LogEventInfo tracedLogEvent = PrepareTracedErrorEvent(logEvent);
base.Write(tracedLogEvent);
return;
}
base.Write(logEvent);
}
private void SaveTrace(LogEventInfo logEvent)
{
int traceDepth = _traceTail.Length;
_traceTail[_head] = logEvent;
_head = (_head + 1) % traceDepth;
}
private LogEventInfo PrepareTracedErrorEvent(LogEventInfo logEvent)
{
// prepare LogEventInfo with trace tail
throw new System.NotImplementedException();
}
}