日志,有没有一种方法可以在出错时记录跟踪级别提升消息的尾部



我正在寻找一种方法,在发生错误时转储跟踪级别日志记录的尾部(以及向上)。

有办法做到这一点吗?

抱歉,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();
    }
}

最新更新