示例#1
0
        public static LogEvent WithParameters(this LogEvent @event, object[] parameters)
        {
            if (parameters == null || parameters.Length == 0)
            {
                return(@event);
            }

            return(@event.MutateProperties(
                       properties =>
            {
                var templatePropertyNames = TemplatePropertiesExtractor.ExtractPropertyNames(@event.MessageTemplate);

                if (ShouldInferNamesForPositionalParameters(templatePropertyNames))
                {
                    // (iloktionov): Name positional parameters with corresponding placeholder names from template:
                    for (var i = 0; i < Math.Min(parameters.Length, templatePropertyNames.Length); i++)
                    {
                        properties = properties.Set(templatePropertyNames[i], parameters[i]);
                    }

                    if (parameters.Length > templatePropertyNames.Length)
                    {
                        for (var i = templatePropertyNames.Length; i < parameters.Length; i++)
                        {
                            properties = properties.Set(i.ToString(), parameters[i]);
                        }
                    }
                }
                else
                {
                    // (iloktionov): Name positional parameters with their indices:
                    for (var i = 0; i < parameters.Length; i++)
                    {
                        properties = properties.Set(i.ToString(), parameters[i]);
                    }
                }

                return properties;
            }));
        }
 public void Should_extract_correct_property_names_from_given_template(string template, params string[] expectedNames)
 {
     TemplatePropertiesExtractor.ExtractPropertyNames(template).Should().Equal(expectedNames);
 }