/// <summary> /// Read a single log event from an already-deserialized JSON object. /// </summary> /// <param name="jObject">The deserialized compact-JSON event.</param> /// <returns>The log event.</returns> public static LogEvent ReadFromJObject(JObject jObject, IMessageFields messageFields) { if (jObject == null) { throw new ArgumentNullException(nameof(jObject)); } return(ReadFromJObject(1, jObject, messageFields)); }
public JsonFormatterParser(IMessageFields messageFields) { this.messageFields = messageFields; JsonSerializerSettings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.DateTimeOffset, DateFormatHandling = DateFormatHandling.IsoDateFormat, DateTimeZoneHandling = DateTimeZoneHandling.Utc, }; }
/// <summary> /// Construct a <see cref="LogEventReader"/>. /// </summary> /// <param name="text">Text to read from.</param> /// <param name="messageFields"></param> /// <param name="serializer">If specified, a JSON serializer used when converting event documents.</param> public LogEventReader(TextReader text, IMessageFields messageFields, JsonSerializer serializer = null) { _messageFields = messageFields; _text = text ?? throw new ArgumentNullException(nameof(text)); _serializer = serializer ?? CreateSerializer(); }
private static LogEvent ReadFromJObject(int lineNumber, JObject jObject, IMessageFields messageFields) { var timestamp = GetRequiredTimestampField(lineNumber, jObject, messageFields.Timestamp); string messageTemplate; if (TryGetOptionalField(lineNumber, jObject, messageFields.MessageTemplate, out var mt)) { messageTemplate = mt; } else if (TryGetOptionalField(lineNumber, jObject, messageFields.Message, out var m)) { messageTemplate = MessageTemplateSyntax.Escape(m); } else { messageTemplate = null; } var level = LogEventLevel.Information; if (TryGetOptionalField(lineNumber, jObject, messageFields.Level, out string l)) { level = (LogEventLevel)Enum.Parse(typeof(LogEventLevel), l); } Exception exception = null; if (TryGetOptionalField(lineNumber, jObject, messageFields.Exception, out string ex)) { exception = TryPopulateException(ex, exception, jObject); } var parsedTemplate = messageTemplate == null ? new MessageTemplate(Enumerable.Empty <MessageTemplateToken>()) : Parser.Parse(messageTemplate); var renderings = Enumerable.Empty <Rendering>(); if (jObject.TryGetValue(messageFields.Renderings, out JToken r)) { var renderedByIndex = r as JArray; if (renderedByIndex == null) { throw new InvalidDataException( $"The `{messageFields.Renderings}` value on line {lineNumber} is not an array as expected."); } renderings = parsedTemplate.Tokens .OfType <PropertyToken>() .Where(t => t.Format != null) .Zip(renderedByIndex, (t, rd) => new Rendering(t.PropertyName, t.Format, rd.Value <string>())) .ToArray(); } List <LogEventProperty> properties; if (jObject.ContainsKey("Properties") && jObject["Properties"] is JObject props) { properties = props.Properties() .Where(f => !messageFields.All.Contains(f.Name)) .Select(f => { var name = messageFields.Unescape(f.Name); var renderingsByFormat = renderings.Where(rd => rd.Name == name).ToList(); return(PropertyFactory.CreateProperty(name, f.Value, renderingsByFormat)); }) .ToList(); } else { properties = jObject .Properties() .Where(f => !messageFields.All.Contains(f.Name)) .Select(f => { var name = messageFields.Unescape(f.Name); var renderingsByFormat = renderings.Where(rd => rd.Name == name).ToList(); return(PropertyFactory.CreateProperty(name, f.Value, renderingsByFormat)); }) .ToList(); } if (TryGetOptionalField(lineNumber, jObject, messageFields.EventId, out var eventId)) // TODO; should support numeric ids. { properties.Add(new LogEventProperty("@i", new ScalarValue(eventId))); } properties.Add(new LogEventProperty("Raw Data", new ScalarValue(jObject.ToString()))); return(new LogEvent(timestamp, level, exception, parsedTemplate, properties)); }
public JsonFileParser(IMessageFields messageFields) { this.messageFields = messageFields; }
static CompactJsonFormatParser() { messageFields = new CompactJsonFormatMessageFields(); }