private MatchDelegate CreateMatchDelegate(string rule) { if (rule.ToLower() == "$host") { return((logFileName, match) => Environment.MachineName); } if (rule.ToLower() == "$datetime") { return((logFileName, match) => DateTime.Now.ToString(CultureInfo.InvariantCulture)); } int elemenNumgerInPath; if (rule.ToLower().StartsWith("$path:") && Int32.TryParse(rule.Split(':').ElementAtOrDefault(1), out elemenNumgerInPath)) { return ((logFileName, match) => logFileName.Split('/', '\\').ElementAtOrDefault(elemenNumgerInPath)); } if (rule.ToLower() == "$rate") { if (RegexRule.GroupNumberFromName("timespan") > 0 && RegexRule.GroupNumberFromName("value") > 0) { return (logFileName, match) => { double value; TimeSpan timeSpan; if (Double.TryParse(match.Groups["value"].Value, out value)) { if (TimeSpan.TryParse(match.Groups["timespan"].Value, out timeSpan)) { if (timeSpan != TimeSpan.Zero) { return (value / timeSpan.TotalMilliseconds).ToString("F"); } } } return "0"; } } ; } if (rule.ToLower().StartsWith("$replace:")) { return((logFileName, match) => match.Result(rule.Split(new[] { ':' }, 2)[1])); } string regexGroupName = rule.Trim(new[] { '{', '}' }); if (rule.StartsWith("{") && rule.EndsWith("}") && RegexRule.GroupNumberFromName(regexGroupName) >= 0) { return((logFileName, match) => match.Groups[regexGroupName].Value); } return((logFileName, match) => rule); }