Ejemplo n.º 1
0
        /// <summary>
        /// Format the log event into the output. Subsequent events will be newline-delimited.
        /// </summary>
        /// <param name="logEvent">The event to format.</param>
        /// <param name="output">The output.</param>
        public void Format(LogEvent logEvent, TextWriter output)
        {
            if (logEvent == null)
            {
                throw new ArgumentNullException(nameof(logEvent));
            }

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

            output.Write("{");
            output.WriteJson("@t", logEvent.Timestamp.UtcDateTime.ToString("O"));
            output.AppendJson("@mt", logEvent.MessageTemplate.Text);

            if (_config.WriteRenderedMessage)
            {
                output.AppendJson("@m", logEvent.MessageTemplate.Render(logEvent.Properties));
            }

            foreach (var item in _redisConfig.MetaProperties)
            {
                output.AppendJson(item.Key, item.Value);
            }

            output.WriteRenderings(logEvent);
            output.AppendJson("@l", logEvent.Level);

            if (logEvent.Exception != null)
            {
                output.AppendJson("@x", logEvent.Exception);
            }


            output.WriteProperties(logEvent.Properties, _valueFormatter);

            output.WriteLine('}');
        }
        public static void WriteProperties(this TextWriter output, IReadOnlyDictionary <string, LogEventPropertyValue> properties, JsonValueFormatter valueFormatter)
        {
            foreach (var property in properties)
            {
                var name = property.Key;

                if (name.Length > 0 && name[0] == '@')
                {
                    // Escape first '@' by doubling
                    name = '@' + name;
                }

                output.AppendJson(name, property.Value, valueFormatter);
            }
        }