Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }
Exemple #3
0
        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)");
            }
        }