IEnumerable<LogEventProperty> ConstructPositionalProperties(MessageTemplate template, object[] messageTemplateParameters) { var positionalProperties = template.PositionalProperties; if (positionalProperties.Length != messageTemplateParameters.Length) SelfLog.WriteLine("Positional property count does not match parameter count: {0}", template); var result = new LogEventProperty[messageTemplateParameters.Length]; foreach (var property in positionalProperties) { int position; if (property.TryGetPositionalValue(out position)) { if (position < 0 || position >= messageTemplateParameters.Length) SelfLog.WriteLine("Unassigned positional value {0} in: {1}", position, template); else result[position] = ConstructProperty(property, messageTemplateParameters[position]); } } var next = 0; for (var i = 0; i < result.Length; ++i) { if (result[i] != null) { result[next] = result[i]; ++next; } } if (next != result.Length) Array.Resize(ref result, next); return result; }
IEnumerable<LogEventProperty> ConstructNamedProperties(MessageTemplate template, object[] messageTemplateParameters) { var namedProperties = template.NamedProperties; if (namedProperties == null) return Enumerable.Empty<LogEventProperty>(); var matchedRun = namedProperties.Length; if (namedProperties.Length != messageTemplateParameters.Length) { matchedRun = Math.Min(namedProperties.Length, messageTemplateParameters.Length); SelfLog.WriteLine("Named property count does not match parameter count: {0}", template); } var result = new LogEventProperty[messageTemplateParameters.Length]; for (var i = 0; i < matchedRun; ++i) { var property = template.NamedProperties[i]; var value = messageTemplateParameters[i]; result[i] = ConstructProperty(property, value); } for (var i = matchedRun; i < messageTemplateParameters.Length; ++i) { var value = _valueConverter.CreatePropertyValue(messageTemplateParameters[i]); result[i] = new LogEventProperty("__" + i, value); } return result; }
/// <summary> /// Construct a new <seealso cref="LogEvent"/>. /// </summary> /// <param name="timestamp">The time at which the event occurred.</param> /// <param name="level">The level of the event.</param> /// <param name="exception">An exception associated with the event, or null.</param> /// <param name="messageTemplate">The message template describing the event.</param> /// <param name="properties">Properties associated with the event, including those presented in <paramref name="messageTemplate"/>.</param> public LogEvent(DateTimeOffset timestamp, LogEventLevel level, Exception exception, MessageTemplate messageTemplate, IEnumerable<LogEventProperty> properties) { if (messageTemplate == null) throw new ArgumentNullException("messageTemplate"); if (properties == null) throw new ArgumentNullException("properties"); _timestamp = timestamp; _level = level; _exception = exception; _messageTemplate = messageTemplate; _properties = new Dictionary<string, LogEventPropertyValue>(); foreach (var p in properties) AddOrUpdateProperty(p); }
/// <summary> /// Create properties based on an ordered list of provided values. /// </summary> /// <param name="messageTemplate">The template that the parameters apply to.</param> /// <param name="messageTemplateParameters">Objects corresponding to the properties /// represented in the message template.</param> /// <returns>A list of properties; if the template is malformed then /// this will be empty.</returns> public IEnumerable<LogEventProperty> ConstructProperties(MessageTemplate messageTemplate, object[] messageTemplateParameters) { if (messageTemplateParameters == null || messageTemplateParameters.Length == 0) { if (messageTemplate.NamedProperties != null || messageTemplate.PositionalProperties != null) SelfLog.WriteLine("Required properties not provided for: {0}", messageTemplate); return NoProperties; } if (messageTemplate.PositionalProperties != null) return ConstructPositionalProperties(messageTemplate, messageTemplateParameters); return ConstructNamedProperties(messageTemplate, messageTemplateParameters); }
IEnumerable<LogEventProperty> ConstructNamedProperties(MessageTemplate template, object[] messageTemplateParameters) { var namedProperties = template.NamedProperties; var matchedRun = namedProperties.Length; if (namedProperties.Length != messageTemplateParameters.Length) { matchedRun = Math.Min(namedProperties.Length, messageTemplateParameters.Length); SelfLog.WriteLine("Named property count does not match parameter count: ", template); } var result = new LogEventProperty[matchedRun]; for (var i = 0; i < matchedRun; ++i) { var property = template.NamedProperties[i]; var value = messageTemplateParameters[i]; result[i] = ConstructProperty(property, value); } return result; }
/// <summary> /// Construct a <see cref="MessageTemplateTextFormatter"/>. /// </summary> /// <param name="outputTemplate">A message template describing the /// output messages.</param> /// <param name="formatProvider">Supplies culture-specific formatting information, or null.</param> public MessageTemplateTextFormatter(string outputTemplate, IFormatProvider formatProvider) { if (outputTemplate == null) throw new ArgumentNullException("outputTemplate"); _outputTemplate = new MessageTemplateParser().Parse(outputTemplate); _formatProvider = formatProvider; }
public LogEventPropertyMessageValue(MessageTemplate template, IReadOnlyDictionary<string, LogEventPropertyValue> properties) { _template = template; _properties = properties; }
/// <summary> /// Construct a new <seealso cref="LogEvent"/>. /// </summary> /// <param name="timestamp">The time at which the event occurred.</param> /// <param name="level">The level of the event.</param> /// <param name="exception">An exception associated with the event, or null.</param> /// <param name="messageTemplate">The message template describing the event.</param> /// <param name="properties">Properties associated with the event, including those presented in <paramref name="messageTemplate"/>.</param> public LogEvent(DateTimeOffset timestamp, LogEventLevel level, Exception exception, MessageTemplate messageTemplate, IEnumerable <LogEventProperty> properties) { if (messageTemplate == null) { throw new ArgumentNullException("messageTemplate"); } if (properties == null) { throw new ArgumentNullException("properties"); } _timestamp = timestamp; _level = level; _exception = exception; _messageTemplate = messageTemplate; _properties = new Dictionary <string, LogEventPropertyValue>(); foreach (var p in properties) { AddOrUpdateProperty(p); } }