Exemplo n.º 1
0
            private static void WriteInfoIndents(
                TextWriter writer,
                Stack <string> indentStack,
                AsciiTreeIndents asciiTreeIndents,
                bool isLastChild,
                bool isLeaf)
            {
                foreach (string indent in indentStack)
                {
                    writer.Write(indent);
                }

                if (isLastChild)
                {
                    writer.Write(asciiTreeIndents.Blank);
                }
                else
                {
                    writer.Write(asciiTreeIndents.Parent);
                }

                if (isLeaf)
                {
                    writer.Write(asciiTreeIndents.Blank);
                }
                else
                {
                    writer.Write(asciiTreeIndents.Parent);
                }
            }
Exemplo n.º 2
0
            public static void WriteTrace(
                TextWriter writer,
                ITrace trace,
                TraceLevel level    = TraceLevel.Verbose,
                AsciiType asciiType = AsciiType.Default)
            {
                if (writer == null)
                {
                    throw new ArgumentNullException(nameof(writer));
                }

                if (trace == null)
                {
                    throw new ArgumentNullException(nameof(trace));
                }

                if ((int)trace.Level > (int)level)
                {
                    return;
                }

                AsciiTreeCharacters asciiTreeCharacter = asciiTreeCharactersMap[asciiType];
                AsciiTreeIndents    asciiTreeIndents   = asciiTreeIndentsMap[asciiType];

                writer.WriteLine(asciiTreeCharacter.Root);
                WriteTraceRecursive(writer, trace, level, asciiTreeIndents, isLastChild: true);
            }
Exemplo n.º 3
0
            private static void WriteTraceRecursive(
                TextWriter writer,
                ITrace trace,
                TraceLevel level,
                AsciiTreeIndents asciiTreeIndents,
                bool isLastChild)
            {
                ITrace         parent      = trace.Parent;
                Stack <string> indentStack = new Stack <string>();

                while (parent != null)
                {
                    bool parentIsLastChild = (parent.Parent == null) || parent.Equals(parent.Parent.Children.Last());
                    if (parentIsLastChild)
                    {
                        indentStack.Push(asciiTreeIndents.Blank);
                    }
                    else
                    {
                        indentStack.Push(asciiTreeIndents.Parent);
                    }

                    parent = parent.Parent;
                }

                WriteIndents(writer, indentStack, asciiTreeIndents, isLastChild);

                writer.Write(trace.Name);
                writer.Write('(');
                writer.Write(trace.Id);
                writer.Write(')');
                writer.Write(space);

                writer.Write(trace.Component);
                writer.Write('-');
                writer.Write("Component");
                writer.Write(space);

                writer.Write(trace.CallerInfo.MemberName);
                writer.Write('@');
                writer.Write(trace.CallerInfo.FilePath.Split('\\').Last());
                writer.Write(':');
                writer.Write(trace.CallerInfo.LineNumber);
                writer.Write(space);

                writer.Write(trace.StartTime.ToString("hh:mm:ss:fff"));
                writer.Write(space);

                writer.Write(trace.Duration.TotalMilliseconds.ToString("0.00"));
                writer.Write(" milliseconds");
                writer.Write(space);

                writer.WriteLine();

                if (trace.Data.Count > 0)
                {
                    bool isLeaf = trace.Children.Count == 0;

                    WriteInfoIndents(writer, indentStack, asciiTreeIndents, isLastChild: isLastChild, isLeaf: isLeaf);
                    writer.WriteLine('(');

                    foreach (KeyValuePair <string, object> kvp in trace.Data)
                    {
                        string key   = kvp.Key;
                        object value = kvp.Value;

                        WriteInfoIndents(writer, indentStack, asciiTreeIndents, isLastChild: isLastChild, isLeaf: isLeaf);
                        writer.Write(asciiTreeIndents.Blank);
                        writer.Write('[');
                        writer.Write(key);
                        writer.Write(']');
                        writer.WriteLine();

                        if (value is TraceDatum traceDatum)
                        {
                            TraceDatumTextWriter traceDatumTextWriter = new TraceDatumTextWriter();
                            traceDatum.Accept(traceDatumTextWriter);

                            string[] infoLines = traceDatumTextWriter
                                                 .ToString()
                                                 .TrimEnd(newLineCharacters)
                                                 .Split(newLines, StringSplitOptions.None);
                            foreach (string infoLine in infoLines)
                            {
                                WriteInfoIndents(writer, indentStack, asciiTreeIndents, isLastChild: isLastChild, isLeaf: isLeaf);
                                writer.Write(asciiTreeIndents.Blank);
                                writer.WriteLine(infoLine);
                            }
                        }
                        else
                        {
                            WriteInfoIndents(writer, indentStack, asciiTreeIndents, isLastChild: isLastChild, isLeaf: isLeaf);
                            writer.Write(asciiTreeIndents.Blank);
                            writer.WriteLine(value.ToString());
                        }
                    }

                    WriteInfoIndents(writer, indentStack, asciiTreeIndents, isLastChild: isLastChild, isLeaf: isLeaf);
                    writer.WriteLine(')');
                }

                for (int i = 0; i < trace.Children.Count - 1; i++)
                {
                    ITrace child = trace.Children[i];
                    WriteTraceRecursive(writer, child, level, asciiTreeIndents, isLastChild: false);
                }

                if (trace.Children.Count != 0)
                {
                    ITrace child = trace.Children[trace.Children.Count - 1];
                    WriteTraceRecursive(writer, child, level, asciiTreeIndents, isLastChild: true);
                }
            }