/// <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); } }