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;
        }
Exemple #2
0
        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;
        }
Exemple #3
0
 /// <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);
 }
Exemple #4
0
        /// <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);
        }
Exemple #5
0
        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;
 }
Exemple #8
0
 /// <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);
     }
 }