它是什么
NebuLog 把应用程序的日志实时推送到浏览器控制台。应用程序照常使用标准的 .NET ILogger 写日志;NebuLog 在大约十分之一秒内显示每一条记录——可过滤、可搜索,并按调用链(trace)跨服务关联。
它起步于 2018 年,当时叫 MyLogger,是一个个人实验项目;2026 年 10 月基于 .NET 10、React 19 和 OpenTelemetry 标准重写为 v2。它以 Apache 2.0 许可开源,不是商业产品:放在这里,是因为这是展示我们如何做软件最直接的方式。
如何试用
- 打开 nebulog.imady.co.nz,选择 Continue as demo visitor(以演示访客身份继续)。无需账号,访客角色为只读。
- 选择八个引导式演示中的一个。每个演示会在一个窗口中打开一个小型商店应用,在另一个窗口中打开已预设过滤条件的控制台。
- 点击商店里的按钮。每个按钮恰好对应一次 HTTP 请求,并显示它的 TraceId,方便你在控制台中找到它。
- 点击 Checkout(结账),观察一个请求如何在同一条调用链下穿过两个服务。
有一个场景值得单独一提:同一个请求,一次由 Minimal API 处理,一次由 MVC 管道处理,前者产生 15 条框架日志,后者产生 55 条。你可以并排看到这个差别。

里面有什么
- 两种接入方式。 通过 SignalR 使用 NebuLog 导出器,延迟最低并支持双向命令;或者从任何语言使用标准的 OTLP 导出器——这种情况下你的代码完全不依赖 NebuLog。
- 建立在标准之上。 应用侧完全遵循 OpenTelemetry,因此同一个应用可以同时把日志发送到 NebuLog 和 .NET Aspire Dashboard。
- 双向通信。 控制台可以向运行中的应用发送命令,应用也可以上报自定义的实时统计数据。
- 默认安全。 人用 Cookie 会话,程序用 API 密钥,四种角色,密钥只以哈希形式存储,日志内容始终作为文本渲染,绝不作为 HTML。
- 按生产标准部署。 容器以非 root 用户在只读文件系统上运行,镜像标签不可变,升级或回滚只需改一行。

实测,而非宣称
以下数据来自 2026 年 10 月 5 日的 v2.0 评估;方法与数据来源见公开代码仓库。
| 持续写入 | 连续五秒每秒 10,077 条,零拒收 |
| 从生产端到浏览器的延迟 | p50 109 毫秒,p95 115 毫秒 |
| 浏览器控制台缓存 100,000 条时 | 滚动流畅,页面中约 51 行 |
| 自动化测试 | 324 项(.NET 246 项,前端 78 项) |
为什么放在这个网站上
工具本身不如它的交付方式重要。v1 作为基线,所以从第一天起每一项需求都是具体的;工作由分工明确、带有书面验收标准的 AI 代理执行,彼此检查对方的产出;v2.0 在分析开始两天后就上线了。同样的方法,也适用于升级一家企业已经依赖的软件。
