Layout.WatchDog.NET.Storages.Sqlite 1.5.0-beta.7

This is a prerelease version of Layout.WatchDog.NET.Storages.Sqlite.
dotnet add package Layout.WatchDog.NET.Storages.Sqlite --version 1.5.0-beta.7
                    
NuGet\Install-Package Layout.WatchDog.NET.Storages.Sqlite -Version 1.5.0-beta.7
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Layout.WatchDog.NET.Storages.Sqlite" Version="1.5.0-beta.7" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Layout.WatchDog.NET.Storages.Sqlite" Version="1.5.0-beta.7" />
                    
Directory.Packages.props
<PackageReference Include="Layout.WatchDog.NET.Storages.Sqlite" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Layout.WatchDog.NET.Storages.Sqlite --version 1.5.0-beta.7
                    
#r "nuget: Layout.WatchDog.NET.Storages.Sqlite, 1.5.0-beta.7"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Layout.WatchDog.NET.Storages.Sqlite@1.5.0-beta.7
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Layout.WatchDog.NET.Storages.Sqlite&version=1.5.0-beta.7&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=Layout.WatchDog.NET.Storages.Sqlite&version=1.5.0-beta.7&prerelease
                    
Install as a Cake Tool

WatchDog

WatchDog 版本 下载量 MIT 许可证

简介

WatchDog 是一个专为 ASP.NET Core Web 应用程序和 API 设计的实时消息、事件、HTTP(请求和响应)和异常记录器和查看器。它允许开发人员记录和查看消息、事件、对其 Web 应用程序的 HTTP 请求以及在运行时捕获的异常,全部实时显示。

WatchDog 利用 SignalR 实现实时通信,默认使用轻量级数据库 LiteDB(无需配置),同时支持扩展至外部数据库(MSSQL, MySQL, PostgreSQL, MongoDB, SQLite)。

本仓库以 Layout.WatchDog.NET 为包 ID 持续维护。上游 WatchDog.NET 的最新公开版本 1.4.12 存在已知依赖安全隐患,请勿继续使用。

主要功能

1.5.0-beta.7 候选准备:日志改为直接等待 Storage 写入,完善依赖注入、取消和实时会话鉴权;修复 LLM 配置保存、MCP 资源释放及对话归档一致性,交互助手新增当前资源快照查询。九个包统一版本,包含接口和失败处理行为变更,升级前请阅读发布说明与验证记录。尚未执行 NuGet 发布;上架前请使用本地候选包源。下方界面导览沿用 beta.6 的演示截图。

  • 实时 HTTP 监控:记录所有请求和响应的详细信息。
  • 异常捕获:自动捕获并记录应用程序运行时的异常。
  • 代码内日志:支持在业务代码中手动记录消息和事件。
  • 重构版 Dashboard:响应式日志工作区、资源雷达与趋势图,支持深浅主题、中英文、侧栏收起及 AI 右侧抽屉;显式启用后通过 /watchdog 访问。
  • 多种数据库支持:内置 LiteDB,支持一键切换至主流关系型数据库、MongoDB 与 SQLite。
  • 日志自动清理:支持配置定时自动清理旧日志。
  • AI 辅助分析(可选):装上附加包并在看板打开开关后,页面右下角出现悬浮助手,可直接用自然语言追问日志与异常;同一套数据也以 MCP 工具形式暴露给 Claude Desktop / Cursor 等外部客户端。核心包不引任何 AI 依赖,不装附加包时行为与之前完全一致。

重构版 Dashboard 页面导览

以下为 beta.6 当前 Dashboard 的真实界面截图,使用固定演示日志与资源数据,不包含真实业务信息、模型凭据或实际 AI 回答。各页面的使用场景、功能边界与英文图片见 Dashboard 图文导览。新版需显式开启,配置见下方快速开始。

登录:独立的看板入口

登录后进入统一导航的日志工作区;使用宿主配置的账号和密码。

新版 Dashboard 登录页面

请求日志:列表与详情一起查看

按路径、方法和状态筛选,选中请求后在下方查看元信息,切换请求头、响应头、请求体与响应体;详情栏随宽度调整,内容以淡主题色区分。

请求日志与响应体详情

异常日志:堆栈与请求上下文并排

左侧快速切换异常,右侧展示异常类型、来源、路径、堆栈和请求体,减少来回打开详情的操作。

异常列表、堆栈与请求上下文

代码日志:关联事件与调用位置

按日志级别筛选,查看事件 ID、消息、源文件行号和调用方法;选中后保留列表上下文。

代码日志流与调用位置详情

资源监控:节点与进程分区展示

资源雷达、CPU/内存趋势、磁盘容量、网络速率及进程 GC/线程集中展示。浏览器保留最近两分钟趋势,不是服务端历史数据库。

节点资源、趋势图与进程指标

深色主题:图表、卡片和导航一起切换

同一套资源数据支持深浅主题,中英文与主题偏好可在顶部切换。

深色主题资源监控

AI 助手:在日志页面打开右侧抽屉

通过悬浮机器人进入日志问答,支持拖动与贴边收起。图中为待发送问题,没有调用模型;需安装并配置可选 Agent 包后使用。

AI 助手右侧抽屉与待发送问题

会话记录:继续排查、重命名与导出

在助手内管理会话,支持打开历史、重命名、导出、删除和多选导出;图中会话为演示数据。

AI 会话记录管理

模型配置:提供商、接口与模型集中管理

在助手内配置提供商、Endpoint、API Key 与模型列表,按需测试连接或保存配置。图中未填写凭据、未执行连接测试。

AI 模型配置面板

<details> <summary>查看窄屏布局:请求详情上下排列</summary>

窄屏中详情由左右分栏切换为上下排列,工具栏自动换行。下图为 780px 宽的演示。

窄屏请求日志与上下排列的详情

</details>

安装

方式一:.NET CLI

安装 Layout.WatchDog.NET 核心包:

dotnet add package Layout.WatchDog.NET --version 1.5.0-beta.7

当前为预发布版,必须显式指定版本号(或加 --prerelease),否则默认只会装到稳定版。

如需使用外部数据库(MSSQL / MySQL / PostgreSQL / SQLite / MongoDB),额外安装对应的 Storage 扩展包:

# 例如使用 PostgreSQL
dotnet add package Layout.WatchDog.NET.Storages.PostgreSql --version 1.5.0-beta.7

可用 Storage 包:

驱动 包 ID
SQL Server Layout.WatchDog.NET.Storages.SqlServer
MySQL Layout.WatchDog.NET.Storages.MySql
PostgreSQL Layout.WatchDog.NET.Storages.PostgreSql
SQLite Layout.WatchDog.NET.Storages.Sqlite
MongoDB Layout.WatchDog.NET.Storages.MongoDb

默认 LiteDB 后端内置于核心包,无需额外安装。

如需 AI 能力,再按需安装两个可选包:

dotnet add package Layout.WatchDog.NET.Mcp   --version 1.5.0-beta.7   # 5 个只读日志查询工具(MCP)
dotnet add package Layout.WatchDog.NET.Agent --version 1.5.0-beta.7   # 巡检报告 + 看板内对话

如需持续采集资源指标并通过标准 OTLP 对外发送 Metrics,可安装独立扩展包:

dotnet add package Layout.WatchDog.NET.OpenTelemetry --version 1.5.0-beta.7

接入方式、指标口径和后续 GreptimeDB 配置见 OpenTelemetry 指南。该包不增加历史数据库或 OTLP 接收端。

交互助手可显式启用 MCP 的 EnableResourceSnapshots,复用当前资源采样缓存回答 CPU、内存、磁盘容量等问题。 支持采样新鲜度、缺失值与指标口径说明,巡检报告仍保持日志分析范围,见 资源问答接入。

方式二:NuGet 包管理器

Install-Package Layout.WatchDog.NET --version 1.5.0-beta.7
# 如需外部数据库,例如 PostgreSQL:
Install-Package Layout.WatchDog.NET.Storages.PostgreSql --version 1.5.0-beta.7

快速开始

1. 注册服务

在 Program.cs 中注册 WatchDog 服务。

using WatchDog;

// 在 Program.cs 中(本包目标框架为 .NET 8 / .NET 10)
builder.Services.AddWatchDog(wd => wd
    .WithAuth("admin", "your-password")
    .WithDashboard(d =>
    {
        d.Enabled = true;
        d.DefaultLocale = "zh-Hans";
        d.Features.Metrics = true; // 显示资源监控页
    }));

2. 配置中间件

在 HTTP 请求管道中启用 WatchDog 中间件。建议在 UseRouting, UseAuthentication, UseAuthorization 之后添加。

var app = builder.Build();

app.UseWatchDog();

异常日志中间件已由 UseWatchDog() 内部自动挂载,无需手动调用。

3. 查看日志

启动你的应用程序,访问 /watchdog 路径(例如:https://localhost:5000/watchdog),使用配置的用户名和密码登录即可查看实时日志。

上述示例显式启用了新版 Dashboard。未开启 Dashboard.Enabled 时仍使用旧版 WatchPage;新版默认保留 /watchdog-legacy 作为兼容入口。AI 助手还需 Features.Agent、Agent 包和端点配置,见 Agent 接入指南。

宿主自行管理路由

原有 app.UseWatchDog() 保留组合注册方式及默认 MVC 路由行为。需要与宿主自己的 MVC、Minimal API 路由分别管理时,可使用分步入口:

app.UseWatchDogMiddleware();
app.MapWatchDog();             // 只映射 WatchDog 页面、API 与实时端点
app.MapControllers();         // 宿主继续决定自己的路由

AddWatchDog 不再修改宿主的 MvcOptions.EnableEndpointRouting,也不会提前构建一条随后丢弃的中间件管道。启用 WithOutputCache() 时会同时注册所需服务;缓存策略仍由宿主决定。

配置在 AddWatchDog 完成时校验并复制嵌套设置与数组,之后修改原 Builder 对象不会改变已注册配置。配置按启动期生效,不支持通过修改运行对象热更新。非法正则、空配置对象和未知枚举值会作为配置错误提前报告。

工程检查使用 global.json 中固定的 .NET 10 SDK,继续编译和测试 net8.0/net10.0。核心生成 XML 文档并在打包时检查跨框架 API 兼容性;历史文档和命名建议逐步治理,取消令牌遗漏、动态日志模板和可空错误会阻止新增回归。跨平台核心测试与 Linux 六数据库集成测试分别执行。

记录日志

在代码的任何位置调用 WatchLogger:

using WatchDog;

// 记录普通信息
WatchLogger.Log("用户登录成功");

// 记录警告
WatchLogger.LogWarning("请求频率过高");

// 记录错误
WatchLogger.LogError("处理订单失败", eventId: "Order_001");

也可以把标准的 ILogger 日志汇总到 WatchDog:

// .NET 8 / .NET 10 在 Program.cs 中配置
builder.Logging.AddWatchDogLogger();

通过 DI 扩展

默认扩展契约通过 TryAdd 注册,宿主可以在 AddWatchDog / AddWatchDogAgent 前注册自己的实现,也可以在注册后覆盖。默认行为、HTTP 路由、数据格式与配置保持兼容。

扩展点 契约 生命周期
日志 ID、代码日志构建 IWatchDogIdGenerator、IWatchDogLogWriter Singleton
请求选择与模块内部路径 IWatchDogRequestFilter、IWatchDogPathRegistry Singleton
HTTP 采集、脱敏 IWatchDogHttpCaptureFactory、IWatchDogHttpSanitizer Singleton;工厂每请求创建一个 IWatchDogHttpCapture
登录凭据、会话、实时连接 IWatchDogCredentialValidator、IWatchDogSessionService、IWatchDogRealtimeSessions Singleton
投递、广播、独立诊断 IWatchDogLogPipeline、IBroadcastHelper、IWatchDogDeliveryDiagnostics Singleton
时间、指标 框架 TimeProvider、IWatchDogMetricsCollector、INodeMetricsProvider Singleton
聊天、历史、报告 IWatchDogChatAgent、IChatHistoryStore、IWatchDogReportAgent Singleton
模型客户端与工具源创建 IWatchDogModelClientFactory、IAgentToolSourceFactory Singleton 工厂;返回实例由各 Agent 持有
AI 配置与能力探测 IAiSettingsStore、IWatchDogAiAvailability Singleton / Scoped

核心契约位于 WatchDog.src.Interfaces,节点原始指标契约位于 WatchDog.src.Helpers.Metrics,Agent 契约位于 WatchDog.Agent、WatchDog.Agent.Chat 和 WatchDog.Agent.Ai。

using WatchDog.src.Interfaces;

builder.Services.AddSingleton<IWatchDogIdGenerator, ApplicationLogIdGenerator>();
builder.Services.AddWatchDog(wd => wd.WithAuth("admin", "your-password"));

Singleton 实现需要支持并发,不能捕获 Scoped 服务。采集实例由请求中间件恢复和释放,不得关闭业务流;脱敏仅修改日志副本。自定义会话策略应同时处理会话与实时连接,保留注销撤销连接及过期检查。投递诊断不能重新写入 WatchDog 日志,以免回环。

核心宿主适配器会启动、停止被选中的会话/投递实现(实现 IHostedService 时),无需再为这些实例调用 AddHostedService。默认日志直接等待 Storage 写入,成功后再广播,不使用内存 Channel、后台队列或持久化暂存。替换投递实现也不会跳过存储初始化。显式 UseSqlite / UseMySql 等仍选择对应后端。可选存储能力支持直接注册 IWatchDogAiSettingsStorage、IWatchDogChatSessionStorage、IWatchDogRetentionStorage、IWatchLogWindowReader,未注册时继续使用当前存储实现提供的能力。

IWatchDogLogPipeline.WriteAsync 现在返回 Task,同步 Write 与 IWatchDogLogWriter.Write 都等待实际入库;移除旧 TryWrite、入队成功布尔值及容量/字节预算/排空配置。写库失败向调用方传播,ILogger 可能由框架包装为 AggregateException;同步日志会承担数据库延迟。HTTP 响应已发送时无法撤回成功状态,业务异常的保存失败通过独立诊断及异常 Data["WatchDog.LoggingFailure"] 报告,原业务异常仍被保留。Storage 内部及其构造/迁移不能通过 WatchDog 记录自身诊断,应使用独立日志出口,避免递归依赖。详见直接写库语义。

宿主适配器与直接写入服务共享幂等存储初始化;停止时关闭新调用并等待正在执行的操作,不丢弃或额外取消调用方持有的写入。写入、Flush、清空与压缩通过操作门协调,滚动保留仍由 Storage 的事务/并发语义保障。会话 Registry 将 HTTP/SignalR 适配与租约索引分开管理,断连回调和发送在状态锁外执行;注销或过期会取消该租约正在进行的发送,推送不会延长空闲时间。

IWatchDogModelClientFactory 负责所有模型提供商,并区分聊天、报告和连接测试;原有 IWatchDogChatClientFactory 仍只处理 provider=custom。工具源工厂每次创建独立实例,报告与聊天各自缓存和释放连接。工厂返回的模型客户端由 Agent 在关闭时释放,连接测试用完即释放。

原有 WatchLogger.* 和 WatchDogSessionAuth 静态 API 保留。多个宿主共用进程时,请通过 ILogger / IWatchDogLogWriter 记录日志;静态 WatchLogger 仍使用最后一次 UseWatchDog 指定的宿主。

更多文档

主题 文档
按主题浏览全部文档 文档目录
全部配置项(appsettings 绑定、Fluent Builder、看板、节点监控、AI 助手) 配置指南
数据库后端(连接串、表结构、分页与清表、压缩) 数据库后端接入指南
六后端雪花主键迁移、滚动保留、实库测试与压测复现 存储维护与压测指南
六后端QPS、查询延迟与已验证容量档位 存储压测实测报告
把日志能力暴露成 MCP 工具 MCP 接入指南
巡检报告与看板 AI 助手 Agent 接入指南
运行测试 test/README.md
各版本发布说明 Releases

项目结构

整体分三层:宿主进程内的请求管道与终结点、可按需替换的存储层、以及可选的 AI 扩展包。所有能力都在宿主进程内运行——没有独立服务,也没有第二个进程。

flowchart TB
    Browser["浏览器:独立看板 / 原内嵌页面"]
    ExtClient["Claude Desktop / Cursor"]
    Model["外部模型:OpenAI / Anthropic / Ollama"]

    subgraph Process["宿主进程 · WatchDog 全部在进程内"]
        Pipe["请求管道<br/>异常记录 → 路由 → 请求/响应记录 → 终结点"]
        subgraph Endpoints["终结点"]
            Legacy["/watchdog-legacy 原内嵌页面"]
            Dash["/watchdog 独立看板"]
            Api["/watchdog-api/v1/* JSON API"]
            Hub["/wtchdlogger SignalR"]
            Mcp["/watchdog-mcp MCP 工具"]
            Ai["/watchdog-ai/v1/* AI 助手"]
        end
        Services["核心服务<br/>WatchDogOptions / SkipRegistry / SessionAuth / LogIdGenerator"]
        Ana["IWatchDogAnalytics<br/>DefaultAnalytics:聚合、时间窗口、按 id 查单条"]
    end

    subgraph Store["存储层 · IWatchDogStorage(可替换)"]
        Lite["LiteDB(内置,零配置)"]
        Ext["SQLite / SQL Server / MySQL / PostgreSQL / MongoDB"]
    end

    Browser --> Dash
    Browser --> Api
    Browser --> Hub
    ExtClient --> Mcp
    Model --> Ai
    Ai --> Mcp
    Pipe --> Legacy
    Pipe --> Dash
    Pipe --> Api
    Pipe --> Hub
    Pipe --> Mcp
    Pipe --> Ai
    Api --> Ana
    Mcp --> Ana
    Ai --> Ana
    Pipe -- 写日志 --> Store
    Ana -- 读时间窗口 --> Store
    Services -. 配置 / 跳过前缀 / 会话校验 .-> Pipe

各模块说明:

  • src/WatchDog/:核心库源码(Layout.WatchDog.NET,内置 LiteDB 后端与看板嵌入资源宿主)。
    • Extensions/:AddWatchDog / UseWatchDog 入口与 Fluent Builder。
    • Validation/:启动期配置校验。
    • src/Controllers/:包含处理日志查看请求的控制器。
    • src/Storages/:默认 LiteDB 存储实现(IWatchDogStorage)。
    • src/Analytics/:可分析查询层(聚合、时间窗口、按 id 查单条)。
    • src/Helpers/:日志 ID 生成器、分页、节点指标采集等工具。
    • src/Hubs/:SignalR 集线器,用于实时推送日志。
    • src/Models/:数据模型定义与统一配置模型 WatchDogOptions。
    • src/Services/:后台自动清理服务等。
    • src/WatchPage/:内嵌前端页面(由 /WTCHDGstatics 提供)。
    • src/Dashboard/:Vue 看板构建产物(内嵌为资源)。
  • src/WatchDog.Storages.SqlServer/、.MySql/、.PostgreSql/、.Sqlite/、.MongoDb/:外部数据库 Storage 扩展包,各自只依赖一个驱动。
  • src/WatchDog.Mcp/:MCP Server 扩展包(Layout.WatchDog.NET.Mcp),同进程内嵌,暴露 5 个只读日志查询工具,不依赖任何模型。
  • src/WatchDog.OpenTelemetry/:持续采集资源指标并通过 OTLP 导出的可选扩展包(Layout.WatchDog.NET.OpenTelemetry),不含历史存储。
  • src/WatchDog.Agent/:单 Agent 宿主扩展包(Layout.WatchDog.NET.Agent),把 MCP 端点包成可出报告的巡检 Agent,并给看板提供悬浮助手。
  • src/WatchDog.Dashboard/:独立看板前端源码(Vue 3 + Vite + Tailwind)。
  • samples/:API / MVC / MCP / Agent 示例宿主。
  • test/:单元测试工程(xunit.v3),运行方式见 test/README.md。

贡献

如果你发现了 Bug 或者希望增加新功能:

  1. Fork 本仓库。
  2. 创建你的特性分支 (git checkout -b feature/AmazingFeature)。
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')。
  4. 推送到分支 (git push origin feature/AmazingFeature)。
  5. 发起 Pull Request。

致谢


许可证:本项目采用 MIT 许可证。

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.5.0-beta.7 54 11/7/2026
1.5.0-beta.6 55 11/3/2026
1.5.0-beta.5 63 11/2/2026
1.5.0-beta.4 72 10/31/2026