private static void FillParsedConverterParams(ParsedConverterParams parsedParams, KeyValuePair <string, string> val, string context) { Contract.Requires(parsedParams != null); switch (val.Key.Trim().ToLower()) { case "format": parsedParams.Format = val.Value; break; case "valueonnull": parsedParams.ValueOnNull = val.Value; break; case "prefix": parsedParams.Prefix = val.Value; break; case "suffix": parsedParams.Suffix = val.Value; break; default: throw new LoggerMessageTemplateParsingException("Incorrect or unsupported token parameter ('" + val.Key + "'). Possible values: 'Format', 'ValueOnNull', 'Prefix' or 'Suffix'. Context: " + context); } }
private static LoggingEventConverterBase ParseConverter(string data, ref int curPos, ConverterFactory factory) { int startPos = curPos; if (startPos > data.Length) { startPos = data.Length; } SkipSpaces(data, ref curPos); if (curPos >= data.Length) { throw new LoggerMessageTemplateParsingException("Unexpected end of string. Substitution token end was not found. String: '" + data + "', Position: " + curPos.ToString()); } string key = ReadTerm(data, ref curPos); SkipSpaces(data, ref curPos); if (curPos >= data.Length) { throw new LoggerMessageTemplateParsingException("Unexpected end of string. Closing brace for substitution token not found ('}'). Token: '" + data.Substring(startPos) + "', String: '" + data + "', Postion: " + curPos.ToString()); } ParsedConverterParams parsedParams = new ParsedConverterParams(); while (curPos < data.Length) { switch (data[curPos]) { case '}': curPos++; return(CreateConverter(key, parsedParams, factory)); case ',': curPos++; var keyValue = ParseKeyValue(data, ref curPos); FillParsedConverterParams(parsedParams, keyValue, data.Substring(startPos)); break; default: throw new LoggerMessageTemplateParsingException("Incorrect symbol during parsing token parameters ('" + data[curPos].ToString() + "'). '}' or ',' expected. Token: '" + data.Substring(startPos) + "', String: '" + data + "', Position: " + curPos.ToString()); } SkipSpaces(data, ref curPos); } throw new LoggerMessageTemplateParsingException("Unexpected end of string. Closing brace for substitution token not found ('}'). Token: '" + data.Substring(startPos) + "', String: '" + data + "', Postion: " + curPos.ToString()); }
private static LoggingEventConverterBase WrapByParsedParams(LoggingEventConverterBase src, ParsedConverterParams parsedParams, string defValOnNull) { Contract.Requires(src != null); Contract.Requires(parsedParams != null); string prefix = parsedParams.Prefix; if (prefix == "") { prefix = null; } string suffix = parsedParams.Suffix; if (suffix == "") { suffix = null; } string valueOnNull = parsedParams.ValueOnNull; if (valueOnNull == "") { valueOnNull = null; } else if (valueOnNull == null) { valueOnNull = defValOnNull; } if (prefix == null && suffix == null && valueOnNull == null) { return(src); } return(new LoggingEventConverterExtension(src, prefix, suffix, valueOnNull)); }
private static LoggingEventConverterBase CreateConverter(string key, ParsedConverterParams parsedParams, ConverterFactory factory) { Contract.Requires(key != null); Contract.Requires(parsedParams != null); Contract.Requires(factory != null); ConverterTypes type; if (!Substitutions.TryGetValue(key.ToLowerInvariant(), out type)) { throw new LoggerMessageTemplateParsingException("Incorrect or unsupported token name: " + key); } switch (type) { case ConverterTypes.LevelConverter: return(factory.CreateLevelConverter()); case ConverterTypes.MachineNameConverter: return(WrapByParsedParams(factory.CreateMachineNameConverter(), parsedParams, "??")); case ConverterTypes.MachineIpAddressConverter: return(WrapByParsedParams(factory.CreateMachineIpAddressConverter(), parsedParams, "??")); case ConverterTypes.ProcessNameConverter: return(WrapByParsedParams(factory.CreateProcessNameConverter(), parsedParams, "??")); case ConverterTypes.ProcessIdConverter: return(WrapByParsedParams(factory.CreateProcessIdConverter(), parsedParams, "??")); case ConverterTypes.AssemblyConverter: return(WrapByParsedParams(factory.CreateAssemblyConverter(), parsedParams, "<no asm>")); case ConverterTypes.NamespaceConverter: return(WrapByParsedParams(factory.CreateNamespaceConverter(), parsedParams, "<no ns>")); case ConverterTypes.ClassConverter: return(WrapByParsedParams(factory.CreateClassConverter(), parsedParams, "<no class>")); case ConverterTypes.MethodConverter: return(WrapByParsedParams(factory.CreateMethodConverter(), parsedParams, "<no method>")); case ConverterTypes.MessageConverter: return(WrapByParsedParams(factory.CreateMessageConverter(), parsedParams, "<no msg>")); case ConverterTypes.ContextConverter: return(WrapByParsedParams(factory.CreateContextConverter(), parsedParams, null)); case ConverterTypes.ExceptionConverter: return(WrapByParsedParams(factory.CreateExceptionConverter(), parsedParams, "<no exception>")); case ConverterTypes.StackSourceConverter: return(WrapByParsedParams(factory.CreateStackSourceConverter(), parsedParams, "??")); case ConverterTypes.StackSourceHeadConverter: return(WrapByParsedParams(factory.CreateStackSourceHeadConverter(), parsedParams, null)); case ConverterTypes.StackSourceTailConverter: return(WrapByParsedParams(factory.CreateStackSourceTailConverter(), parsedParams, null)); case ConverterTypes.DateConverter: return(factory.CreateDateConverter(parsedParams.Format)); default: throw new ArgumentException(string.Format("Unknown ConverterTypes value: \"{0}\"", type.ToString())); } }