DEV Community

Satish Patil
Satish Patil

Posted on

RootAlert - Real-time Exception Tracking for .NET with Redis

πŸš€ RootAlert - Real-time Exception Tracking for .NET

RootAlert is an open-source real-time error tracking and alerting library for .NET applications. It captures unhandled exceptions, batches them intelligently, and sends alerts to Microsoft Teams, Slack, and more.

πŸ”₯ Features

βœ… Automatic exception tracking with minimal setup

βœ… Batched alerts to prevent spam

βœ… Microsoft Teams (Adaptive Cards) & Slack (Blocks & Sections) support

βœ… Customizable batch interval using TimeSpan

βœ… Supports Redis-based storage for persistence

βœ… Rich error logs including request details, headers, and stack traces


πŸ“¦ Installation

RootAlert is available on NuGet. Install it using:

 dotnet add package RootAlert --version 0.1.5
Enter fullscreen mode Exit fullscreen mode

Or via Package Manager:

 Install-Package RootAlert -Version 0.1.5
Enter fullscreen mode Exit fullscreen mode

⚑ Quick Start

1️⃣ Configure RootAlert in Program.cs

Register RootAlert and configure your preferred alerting method (Teams, Slack, etc.).

using RootAlert.Config;
using RootAlert.Extensions;

var builder = WebApplication.CreateBuilder(args);

var rootAlertOptions = new List<RootAlertOption>
{
    new RootAlertOption
    {
        AlertMethod = AlertType.Teams,
        WebhookUrl = "https://your-teams-webhook-url"
    },
    new RootAlertOption
    {
        AlertMethod = AlertType.Slack,
        WebhookUrl = "https://your-slack-webhook-url"
    }
};

var rootAlertSetting = new RootAlertSetting
{
    Storage = new RedisAlertStorage("127.0.0.1:6379"), // Redis storage
    BatchInterval = TimeSpan.FromSeconds(20),
    RootAlertOptions = rootAlertOptions,
};

builder.Services.AddRootAlert(rootAlertSetting);

var app = builder.Build();

// βœ… Handle exceptions first
app.UseMiddleware<ExceptionHandlingMiddleware>();

// βœ… Then, log errors with RootAlert
app.UseRootAlert();

app.UseRouting();
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });

app.Run();
Enter fullscreen mode Exit fullscreen mode

βœ… RootAlert will now automatically capture all unhandled exceptions!


πŸš€ Redis Storage for Persistent Logging

By default, RootAlert batches errors in memory, meaning errors are lost if the application restarts. To ensure persistence, you can use Redis as storage.

** 1️⃣ Configure Redis Storage in Program.cs**

Update your RootAlertSetting to use Redis:

var rootAlertSetting = new RootAlertSetting
{
    Storage = new RedisAlertStorage("127.0.0.1:6379"), // Use Redis storage
    BatchInterval = TimeSpan.FromSeconds(20),
    RootAlertOptions = rootAlertOptions,
};
Enter fullscreen mode Exit fullscreen mode

2️⃣ Redis Benefits

βœ… Persistence - Logs are stored even after an app restart.

βœ… Scalability - Works across multiple instances of your app.

βœ… Performance - Faster retrieval and processing of batched errors.


⚠️ Important Notes

❗ If an exception filter is added, RootAlert won't work.

Why? Exception filters handle errors before middleware gets a chance to process them. Since RootAlert works as middleware, it will never see the exception if a filter catches it first.

βœ… Solution: Ensure RootAlert is added after any existing exception-handling middleware.

If your application has a global exception-handling middleware, register RootAlert after it to ensure exceptions are logged correctly.

app.UseMiddleware<ExceptionHandlingMiddleware>(); // Your existing middleware
app.UseRootAlert(); // Register RootAlert after the exception middleware
Enter fullscreen mode Exit fullscreen mode

πŸ† Microsoft Teams Integration

RootAlert supports Microsoft Teams via Adaptive Cards for structured error logging.

πŸ”Ή How to Get a Teams Webhook URL

RootAlert supports Microsoft Teams integration via:

  1. Incoming Webhooks (Connector) – Simple and quick setup. (Will be deprecated)
  2. Microsoft Teams Workflow API – Easier than Power Automate, with a built-in Webhook template.

πŸ”Ή Option 1: Using an Incoming Webhook (Connector)

This method is the easiest way to receive error alerts in a Teams channel.

πŸ“Œ Steps to Get a Teams Webhook URL

  1. Open Microsoft Teams and go to the desired channel.
  2. Click "…" (More options) β†’ Connectors.
  3. Find "Incoming Webhook" and click "Configure".
  4. Name it RootAlert Notifications and click Create.
  5. Copy the Webhook URL and use it in RootAlertOptions.

πŸ”Ή Option 2: Using Microsoft Teams Workflow API (via Webhook Template)

This method is even easier than Power Automate and uses a built-in workflow to receive data via Webhook.
πŸŽ₯ Watch this video for a step-by-step guide:

Microsoft Teams Workflow API Setup

πŸ”— YouTube Link: https://www.youtube.com/watch?v=jHTU_jUnswY

πŸ“Œ Steps to Configure Teams Workflow API

  1. Open Microsoft Teams and Go to Workflows
    • Click on β€œβ€¦β€ (More options) β†’ Workflows. --> Create
  2. Select "Post to a channel when a webhook request is received" Template
    • Search for "Post to a channel when a webhook request is received" and select the ready-made template.
    • Click Next to proceed.
  3. Choose Team and Channel
    • Select the Team where you want to post alerts.
    • Choose the Channel where notifications should appear.

πŸ”Ή Example Teams Alert (Adaptive Card)

RootAlert sends alerts as rich Adaptive Cards:

  1. Copy the Webhook URL
    • After selecting the Team and Channel, Teams will generate a Webhook URL.
    • Copy this URL and use it in your RootAlert settings.

Teams Adaptive Card


🚨 Example Error Alert

RootAlert captures rich error details including request details, headers, and stack traces:

πŸ†” Error ID: abc123
⏳ Timestamp: 02/05/2025 4:02:41 AM
----------------------------------------------------
🌐 REQUEST DETAILS
πŸ”— URL: /weatherforecast
πŸ“‘ HTTP Method: GET
----------------------------------------------------
πŸ“© REQUEST HEADERS
πŸ“ User-Agent: Mozilla/5.0
----------------------------------------------------
⚠️ EXCEPTION DETAILS
❗ Type: DivideByZeroException
πŸ’¬ Message: Attempted to divide by zero.
----------------------------------------------------
πŸ” STACK TRACE
   at Program.Main() in Program.cs:line 54
   at RootAlertMiddleware.Invoke()
----------------------------------------------------
Enter fullscreen mode Exit fullscreen mode

πŸ›  Roadmap

πŸ”Ή Database Storage - Store logs in SQL, Redis, or NoSQL

πŸ”Ή Email Alerts - Send exception reports via SMTP

πŸ”Ή Log Severity Filtering - Send only critical errors


πŸ“œ License

RootAlert is open-source and available under the MIT License.


πŸ’‘ Contributing

πŸš€ Contributions are welcome! Feel free to submit pull requests or feature requests on GitHub.


πŸ”— Connect with Us

πŸ“§ Email: satsvelke@gmail.com

🐦 Twitter: @satsvelke

Image of Docusign

πŸ› οΈ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

Image of Datadog

The Essential Toolkit for Front-end Developers

Take a user-centric approach to front-end monitoring that evolves alongside increasingly complex frameworks and single-page applications.

Get The Kit