项目概述
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 CLI: dotnet add package WatchDog.NET --version 1.4.12Package Manager: Install-Package WatchDog.NET --version 1.4.12
使用
注册服务:在 Startup.cs的ConfigureServices方法中注册 WatchDog 服务。配置中间件:在 Startup.cs的Configure方法中添加 WatchDog 中间件。配置认证(可选):设置日志查看界面的用户名和密码。 记录日志:使用 WatchLogger类记录消息、事件和异常。查看日志:启动应用后,访问 /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