/// <summary> /// Checks a <see cref="LogEventPropertyValue"/> to have the correct data value type. /// </summary> /// <param name="receivedPropertyName">The key to use when writing the data value as GELF property.</param> /// <param name="property">The <see cref="LogEventPropertyValue"/> containing the data value.</param> /// <returns>A <see cref="GraylogPropertyCheckResult"/> with the check result.</returns> public GraylogPropertyCheckResult CheckProperty(string receivedPropertyName, LogEventPropertyValue property) { var res = new GraylogPropertyCheckResult { ReceivedPropertyName = receivedPropertyName }; var pos = IndexOfKey(receivedPropertyName); if (pos == -1) { res.CheckResult |= GraylogPropertyCheckResultType.ErrorNameNotRegistered; return(res); } res.ExpectedPropertyName = Keys[pos]; if (!receivedPropertyName.Equals(res.ExpectedPropertyName)) { res.CheckResult |= GraylogPropertyCheckResultType.ErrorNameSpelling; } res.PropertyValue = GetValue(property, out var receivedType); var expectedType = Values[pos]; if (expectedType == GraylogPropertyType.Object && receivedType != GraylogPropertyType.String || !expectedType.HasFlag(receivedType)) { res.CheckResult |= GraylogPropertyCheckResultType.ErrorValueTypeNotMatching; res.ExpectedValueType = expectedType; res.ReceivedValueType = receivedType; } return(res); }
private GelfMessage CreatePropertyErrorMessage(GraylogPropertyCheckResult propCheckResult) { var propertyErrorMessageBuilder = CreateGelfMessageBuilder("Error in property name/type check.", DateTime.UtcNow, GelfLevel.Error); if (string.IsNullOrEmpty(propCheckResult.ExpectedPropertyName)) { propertyErrorMessageBuilder.SetAdditionalField($"{_config.PropertyPrefix}expectedPropertyName", propCheckResult.ExpectedPropertyName); } if (string.IsNullOrEmpty(propCheckResult.ReceivedPropertyName)) { propertyErrorMessageBuilder.SetAdditionalField($"{_config.PropertyPrefix}receivedPropertyName", propCheckResult.ReceivedPropertyName); } if (propCheckResult.ExpectedValueType != GraylogPropertyType.Undefined) { propertyErrorMessageBuilder.SetAdditionalField($"{_config.PropertyPrefix}expectedPropertyType", propCheckResult.ExpectedValueType.ToString()); } if (propCheckResult.ReceivedValueType != GraylogPropertyType.Undefined) { propertyErrorMessageBuilder.SetAdditionalField($"{_config.PropertyPrefix}receivedPropertyType", propCheckResult.ReceivedValueType.ToString()); } return(propertyErrorMessageBuilder.ToMessage()); }