public void Emit(LogEvent entry) { string message = entry.Text; LogFormatUtility.WritePrefix(_writer, entry, ref _lastDate); _writer.WriteLine(message); if (entry.Exception != null) { WriteException(entry.Exception); } }
public void Emit(LogEvent entry) { foreach (RecentMemory memory in _recentMemories) { if (entry.Text == memory.Text && entry.Exception == memory.Exception) { memory.Count += 1; _writer.Edit(memory.MarkID, $" (x{memory.Count})"); return; } } _entry = entry; _currentColors = colorLookup[entry.Level]; _writer.Color = DarkGray; LogFormatUtility.WritePrefix(_writer, _entry, ref _lastDate); if (!colorLookup.TryGetValue(_entry.Level, out ColorScheme colors)) { colors = new ColorScheme(Magenta, Gray); } WriteHighlightedText(entry.Text, colors); _writer.Color = colors.Dark; _writer.Write(""); object lineEndMark = _writer.Mark(); _writer.WriteLine(); if (_entry.Exception != null) { WriteException(_entry.Exception); } _recentMemories.Enqueue(new RecentMemory { Text = _entry.Text, Exception = _entry.Exception, MarkID = lineEndMark, Count = 1 }); if (_recentMemories.Count > 3) { RecentMemory old = _recentMemories.Dequeue(); _writer.ClearMark(old.MarkID); } }
private void WriteStackTrace(IEnumerable <StackFrame> trace) { if (trace == null) { _writer.WriteLine("(Stacktrace is null)"); return; } bool missingInfo = false; foreach (var frame in trace) { LogFormatUtility.GetSignatureElements( frame.GetMethod(), out string methodName, out string arguments); string fileName = frame.GetFileName(); bool missingFilename = string.IsNullOrWhiteSpace(fileName); missingInfo |= missingFilename; int lineNumber = frame.GetFileLineNumber(); bool missingLineNumber = lineNumber == 0; missingInfo |= missingLineNumber; _writer.Write($"at "); if (!missingLineNumber) { _writer.Write($"line {lineNumber} of "); } _writer.Write($"{methodName}{arguments}"); if (!missingFilename) { _writer.Write($"in {frame.GetFileName()}"); } _writer.WriteLine(); } if (missingInfo) { _writer.WriteLine($"(Some info is missing. This is expected if release-mode code is involved)"); } }