private string RenderPropertyValue(LogEventPropertyValue propertyValue)
 {
     using (TextWriter tw = new StringWriter())
     {
         propertyValue.Render(tw);
         var result = tw.ToString();
         result = result.Trim('"');
         return(result);
     }
 }
        void PrettyPrint(LogEventPropertyValue value, string format, IFormatProvider formatProvider)
        {
            var scalar = value as ScalarValue;

            if (scalar != null)
            {
                Console.ForegroundColor = GetScalarColor(scalar);
                value.Render(Console.Out, format, formatProvider);
                return;
            }

            var seq = value as SequenceValue;

            if (seq != null)
            {
                Console.ForegroundColor = Punctuation;
                Console.Write("[");

                var sep = "";
                foreach (var element in seq.Elements)
                {
                    Console.ForegroundColor = Punctuation;
                    Console.Write(sep);
                    sep = ", ";

                    PrettyPrint(element, null, formatProvider);
                }

                Console.ForegroundColor = Punctuation;
                Console.Write("]");
                return;
            }

            var str = value as StructureValue;

            if (str != null)
            {
                if (str.TypeTag != null)
                {
                    Console.ForegroundColor = Subtext;
                    Console.Write(str.TypeTag);
                    Console.Write(" ");
                }

                Console.ForegroundColor = Punctuation;
                Console.Write("{");

                var sep = "";
                foreach (var prop in str.Properties)
                {
                    Console.ForegroundColor = Punctuation;
                    Console.Write(sep);
                    sep = ", ";

                    Console.ForegroundColor = NameSymbol;
                    Console.Write(prop.Name);

                    Console.ForegroundColor = Punctuation;
                    Console.Write("=");

                    PrettyPrint(prop.Value, null, formatProvider);
                }

                Console.ForegroundColor = Punctuation;
                Console.Write("}");
                return;
            }

            var div = value as DictionaryValue;

            if (div != null)
            {
                Console.ForegroundColor = Punctuation;
                Console.Write("{");

                var sep = "";
                foreach (var element in div.Elements)
                {
                    Console.ForegroundColor = Punctuation;
                    Console.Write(sep);
                    sep = ", ";
                    Console.Write("[");
                    PrettyPrint(element.Key, null, formatProvider);

                    Console.ForegroundColor = Punctuation;
                    Console.Write("]=");

                    PrettyPrint(element.Value, null, formatProvider);
                }

                Console.ForegroundColor = Punctuation;
                Console.Write("}");
                return;
            }

            value.Render(Console.Out, format, formatProvider);
        }