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:
RuleExecutedEventis a plain data model — no behavior, just structured propertiesRuleLoggingExtensionsprovides structured logging viaMicrosoft.Extensions.Logging- Works with any
ILoggerimplementation (Serilog, NLog, log4net, etc.) - Uses event IDs for filtering and routing:
1001–1004
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);
}
}
Related
- Rule — Individual rule API
- RuleResult — Execution result structure
- Lifecycle Events —
OnRuleExecuting/OnRuleExecutedhooks - Rule Metrics — Performance and execution metrics