void Run() { try { int streamVersion = _reader.ReadInt32(); if (_interProcess) { _server.DisposeLocalCopyOfClientHandle(); } for (; ;) { var e = LogEntry.Read(_reader, streamVersion, out bool badEndOfStream); if (e == null || badEndOfStream) { _endFlag = badEndOfStream ? LogReceiverEndStatus.MissingEndMarker : LogReceiverEndStatus.Normal; break; } switch (e.LogType) { case LogEntryType.Line: { if (_monitor.ShouldLogLine(e.LogLevel, e.Tags, out var finalTags)) { var d = new ActivityMonitorLogData(e.LogLevel | LogLevel.IsFiltered, finalTags, e.Text, CKException.CreateFrom(e.Exception), e.FileName, e.LineNumber); d.SetExplicitLogTime(e.LogTime); _monitor.UnfilteredLog(ref d); } break; } case LogEntryType.OpenGroup: { ActivityMonitorLogData d; if (_monitor.ShouldLogLine(e.LogLevel, e.Tags, out var finalTags)) { d = new ActivityMonitorLogData(e.LogLevel | LogLevel.IsFiltered, finalTags, e.Text, CKException.CreateFrom(e.Exception), e.FileName, e.LineNumber); d.SetExplicitLogTime(e.LogTime); } else { d = default; } _monitor.UnfilteredOpenGroup(ref d); } break; case LogEntryType.CloseGroup: _monitor.CloseGroup(e.Conclusions, e.LogTime); break; } } } catch (Exception ex) { _endFlag = LogReceiverEndStatus.Error; _monitor.UnfilteredLog(LogLevel.Fatal, null, "While receiving pipe logs.", ex); } }
public static void SendLine(this IActivityMonitor @this, LogLevel level, string text, Exception ex, [CallerFilePath] string fileName = null, [CallerLineNumber] int lineNumber = 0) { if (@this.ShouldLogLine(level, fileName, lineNumber)) { @this.UnfilteredLog(null, level | LogLevel.IsFiltered, text, @this.NextLogTime(), ex, fileName, lineNumber); } }
/// <summary> /// Private method used by XXX (Trace, Info,..., Fatal) extension methods. /// </summary> static IActivityMonitorLineSender FilterLogLine(this IActivityMonitor @this, LogLevel level, string fileName, int lineNumber) { Debug.Assert((level & LogLevel.IsFiltered) == 0); if (@this.ShouldLogLine(level, fileName, lineNumber)) { return(new ActivityMonitorLineSender(@this, level | LogLevel.IsFiltered, fileName, lineNumber)); } return(ActivityMonitorLineSender.FakeLineSender); }