protected override void Append(LoggingEvent loggingEvent) { if (Sitecore.Configuration.Settings.GetBoolSetting("IFTTT.Logging.Enabled", false)) { LoggerRuleContext ruleContext = new LoggerRuleContext(); ruleContext.LogLevel = loggingEvent.Level.Name; ruleContext.LogText = loggingEvent.MessageObject.ToString(); RunRules(ruleContext); } base.Append(loggingEvent); }
///<summary> /// runs the set of rules and checks for any matches, if it finds a match it will run the rule's associated action /// </summary> /// <param name="ruleContext">Rule context that holds log parameters</param> /// <returns></returns> public static void RunRules(LoggerRuleContext ruleContext) { using (new SecurityDisabler()) { Item rootRulesFolder = webDb.GetItem(Constants.IDs.RulesRootFolderId); if (rootRulesFolder == null) { return; } var rulesItems = rootRulesFolder.Children.Where(i => i.TemplateID.Equals(Constants.Templates.LoggingRule)); if (!rulesItems.Any()) { return; } foreach (var ruleItem in rulesItems) { foreach (Rule <LoggerRuleContext> rule in RuleFactory.GetRules <LoggerRuleContext>(new[] { ruleItem }, Constants.Fields.Rule).Rules) { ruleContext.ItemId = ruleItem.ID; if (rule.Condition != null) { var stack = new RuleStack(); rule.Condition.Evaluate(ruleContext, stack); if (ruleContext.IsAborted) { continue; } if ((stack.Count != 0) && ((bool)stack.Pop())) { rule.Execute(ruleContext); } } else { rule.Execute(ruleContext); } } } } }