← Back to API Reference

RuleDiagnostics

Diagnostics, logging, and auditing model for rule execution. Captures timing, success/failure, and metadata for each evaluated rule.

public class RuleExecutedEvent
public static class RuleLoggingExtensions

Namespace: RoslynRules.Models

Key characteristics:

  • RuleExecutedEvent is a plain data model — no behavior, just structured properties
  • RuleLoggingExtensions provides structured logging via Microsoft.Extensions.Logging
  • Works with any ILogger implementation (Serilog, NLog, log4net, etc.)
  • Uses event IDs for filtering and routing: 10011004

RuleExecutedEvent

Properties

Property Type Description
RuleId Guid Unique identifier of the rule
RuleDescription string Human-readable description of the rule
IsActive bool Whether the rule was active (false means it was skipped)
Success bool Whether the rule passed evaluation (true = success or skipped)
ElapsedMilliseconds double Execution time in milliseconds
Exception Exception? Optional exception if execution failed
Timestamp DateTime UTC timestamp when execution occurred (defaults to DateTime.UtcNow)

Example

var eventData = new RuleExecutedEvent
{
    RuleId = rule.Id,
    RuleDescription = rule.Description,
    IsActive = rule.IsActive,
    Success = result.Success,
    ElapsedMilliseconds = stopwatch.Elapsed.TotalMilliseconds,
    Exception = result.Exception
};

RuleLoggingExtensions

Event IDs

ID Name Trigger
1001 RuleSkipped IsActive == false
1002 RulePassed Success == true
1003 RuleFailed Success == false
1004 RuleError Exception != null

Methods

LogRuleExecuted(this ILogger, RuleExecutedEvent)

Logs a RuleExecutedEvent at Debug level (or Error if an exception occurred).

logger.LogRuleExecuted(eventData);

Log output by state:

State Level Format
Inactive Debug [SKIP] {RuleDescription} (Id: {RuleId}) — inactive rule skipped
Exception Error [ERROR] {RuleDescription} (Id: {RuleId}) — {ElapsedMilliseconds}ms — {ErrorMessage}
Success Debug [PASS] {RuleDescription} (Id: {RuleId}) — {ElapsedMilliseconds}ms
Failure Debug [FAIL] {RuleDescription} (Id: {RuleId}) — {ElapsedMilliseconds}ms

LogRuleExecutedInfo(this ILogger, RuleExecutedEvent)

Same as above but logs at Information level (visible by default in most log configs).

logger.LogRuleExecutedInfo(eventData);

Use this when you want rule results in standard logs, not just Debug output.

Usage Example

using Microsoft.Extensions.Logging;
using RoslynRules.Models;

public class AuditService
{
    private readonly ILogger<AuditService> _logger;

    public AuditService(ILogger<AuditService> logger)
    {
        _logger = logger;
    }

    public void LogRuleResult(Rule rule, RuleResult result, Stopwatch sw)
    {
        var evt = new RuleExecutedEvent
        {
            RuleId = rule.Id,
            RuleDescription = rule.Description,
            IsActive = rule.IsActive,
            Success = result.Success,
            ElapsedMilliseconds = sw.Elapsed.TotalMilliseconds,
            Exception = result.Exception
        };

        // Debug-level logging (production: filtered out by default)
        _logger.LogRuleExecuted(evt);

        // Or: Information-level for audit trails
        _logger.LogRuleExecutedInfo(evt);
    }
}


Back to top

MIT License. Built with Roslyn + Typed Delegates.