×

一款 .NET 开源、功能强大的实时应用监控系统

独孤求败 独孤求败 发表于2026-02-11 22:53:42 浏览17 评论0

抢沙发发表评论

项目概述

WatchDog 是一个专为 ASP.NET Core Web 应用和 API 设计的实时消息、事件、HTTP 请求与响应以及异常日志记录和查看工具。它允许开发者实时记录和查看应用中的消息、事件、HTTP 请求及响应,以及运行时捕获的异常,为应用的监控和调试提供了极大的便利。

应用场景

  • 实时监控:在应用运行过程中,实时监控 HTTP 请求与响应、异常信息等关键数据。
  • 调试辅助:帮助开发者快速定位和解决应用中的问题,提高调试效率。
  • 性能分析:通过分析 HTTP 请求与响应数据,评估应用性能,优化应用性能瓶颈。
  • 安全审计:记录所有关键操作,便于进行安全审计和合规性检查。

功能模块

实时日志记录

  • HTTP 请求与响应日志:记录所有 HTTP 请求与响应的详细信息,包括请求方法、URL、状态码、请求头、响应头等。
  • 异常日志:捕获并记录应用运行时发生的所有异常,包括异常类型、堆栈跟踪等。
  • 消息与事件日志:允许开发者记录自定义的消息和事件,便于监控应用状态。

日志查看与管理

  • 用户友好界面:提供直观的日志查看界面,方便开发者浏览和搜索日志。
  • 搜索与过滤:支持按 HTTP 方法、状态码等条件过滤 HTTP 日志,提供搜索功能快速定位特定日志。
  • 日志清理:支持自动或手动清理日志,避免日志文件过大占用过多存储空间。

认证与安全

  • 日志查看认证:提供用户名和密码认证机制,确保只有授权用户才能访问日志查看界面。
  • 黑名单机制:支持设置黑名单,忽略特定路由、路径或端点的日志记录。

集成与扩展

  • 外部数据库支持:除了内置的 LiteDb 数据库外,还支持 MSSQL、MySQL、PostgreSQL 和 MongoDB 等外部数据库。
  • ILogger 集成:支持将 .NET 的 ILogger 日志 sink 到 WatchDog 中,实现日志的统一管理。

功能特点

  • 实时性:利用 SignalR 实现日志的实时记录和查看。
  • 易用性:提供简单易用的 API 和中间件,方便开发者快速集成到现有应用中。
  • 灵活性:支持多种配置选项,如自动清理日志、设置外部数据库连接等。
  • 可扩展性:模块化设计,易于扩展新的功能模块。

项目技术栈

  • 后端框架:ASP.NET Core
  • 实时通信:SignalR
  • 数据库
    • 内置:LiteDb(Serverless MongoDB-like 数据库,无需配置)
    • 外部支持:MSSQL、MySQL、PostgreSQL、MongoDB

安装与使用

安装

  • .NET CLIdotnet add package WatchDog.NET --version 1.4.12
  • Package ManagerInstall-Package WatchDog.NET --version 1.4.12

使用

  1. 注册服务:在 Startup.cs 的 ConfigureServices 方法中注册 WatchDog 服务。
  2. 配置中间件:在 Startup.cs 的 Configure 方法中添加 WatchDog 中间件。
  3. 配置认证(可选):设置日志查看界面的用户名和密码。
  4. 记录日志:使用 WatchLogger 类记录消息、事件和异常。
  5. 查看日志:启动应用后,访问 /watchdog 路径查看日志。

示例代码

// 注册服务
public void ConfigureServices(IServiceCollection services)
{
    services.AddWatchDogServices(opt => 
    {
        opt.IsAutoClear = true;
        opt.ClearTimeSchedule = WatchDogAutoClearScheduleEnum.Monthly;
        // 配置外部数据库(可选)
        // opt.SetExternalDbConnString = "Server=localhost;Database=testDb;User Id=postgres;Password=root;";
        // opt.DbDriverOption = WatchDogDbDriverEnum.PostgreSql;
    });
}

// 配置中间件
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ...其他中间件配置

    app.UseWatchDogExceptionLogger(); // 可选:记录异常日志

    app.UseWatchDog(opt => 
    {
        opt.WatchPageUsername = "admin";
        opt.WatchPagePassword = "Qwerty@123";
        // 可选配置
        // opt.Blacklist = "Test/testPost, api/auth/login";
        // opt.Serializer = WatchDogSerializerEnum.Newtonsoft;
        // opt.CorsPolicy = "MyCorsPolicy";
        // opt.UseOutputCache = true;
        // opt.UseRegexForBlacklisting = true;
    });
}

// 记录日志
publicclassMyController : ControllerBase
{
    public IActionResult MyAction()
    {
        WatchLogger.Log("Test Log");
        WatchLogger.LogWarning("This is a warning message");
        try
        {
            // 业务逻辑
        }
        catch (Exception ex)
        {
            WatchLogger.LogError(ex.Message, ex);
        }
        return Ok();
    }
}

功能演示

图片
图片
图片
图片
图片

源码地址

https://github.com/IzyPro/WatchDog


群贤毕至

访客