Example #1
0
        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);
        }