Skip to content

BizLogViewer 日志查看器 ​

等宽流式日志查看:级别着色(debug/info/success/warning/danger)、关键字过滤 + 命中高亮、级别过滤、自动滚动可暂停、行号、wrap 换行模式;万行级数据走虚拟滚动(只渲染可视窗口);一键下载当前过滤结果为 .log。任务运行日志、网关访问日志、构建部署输出、审计留档。

任务运行日志 ​

全部级别
7 条
110:00:01任务启动:order-sync
210:00:02fetch成功拉取上游订单 1200 条成功
310:00:04警告3 条订单缺少收货地址,已跳过
410:00:06db调试批量写入 batch#1 rows=500
510:00:08错误写入 batch#2 失败:连接超时
610:00:09正在重试 batch#2 ...
710:00:12成功任务完成:成功 1197 / 跳过 3,耗时 11.2s
结构化条目(time / level / tag / message)+ 内置工具栏。

级别过滤 + 关键字高亮 ​

全部级别
6 条
1[nginx] GET /api/order 200 12ms
2[nginx] GET /api/pay 500 3201ms
3[app] pay callback verify failed: signature mismatch
4[nginx] POST /api/pay/callback 200 5ms
5[app] order#8821 stock not enough
6[nginx] GET /api/order 200 9ms

在工具栏输入「pay」试试:命中片段黄色高亮,条数统计同步过滤结果。

纯字符串日志也可直接传入;输入「pay」查看高亮。

实时日志流 ​

全部级别
1 条
1监听已建立,等待构建事件...
定时追加 + 自动滚动;关掉「自动滚动」开关可回看历史不被拽底。

万行虚拟滚动 ​

共 10,000 条 直接拖动滚动条到底部,DOM 中仅渲染可视区附近的几十行
全部级别
10000 条
100:00:00错误请求 #1 处理完成,耗时 1ms
200:00:01请求 #2 处理完成,耗时 2ms
300:00:02请求 #3 处理完成,耗时 3ms
400:00:03成功请求 #4 处理完成,耗时 4ms
500:00:04请求 #5 处理完成,耗时 5ms
600:00:05调试请求 #6 处理完成,耗时 6ms
700:00:06成功请求 #7 处理完成,耗时 7ms
800:00:07请求 #8 处理完成,耗时 8ms
900:00:08请求 #9 处理完成,耗时 9ms
1000:00:09成功请求 #10 处理完成,耗时 10ms
1100:00:10调试请求 #11 处理完成,耗时 11ms
1200:00:11警告请求 #12 处理完成,耗时 12ms
1300:00:12成功请求 #13 处理完成,耗时 13ms
1400:00:13请求 #14 处理完成,耗时 14ms
1500:00:14请求 #15 处理完成,耗时 15ms
1600:00:15调试请求 #16 处理完成,耗时 16ms
1700:00:16请求 #17 处理完成,耗时 17ms
1800:00:17错误请求 #18 处理完成,耗时 18ms
1900:00:18成功请求 #19 处理完成,耗时 19ms
10,000 条日志滚动全程流畅(DOM 仅渲染可视区附近几十行)。

下载过滤结果 ​

全部级别
4 条
109:12:00auditadmin 登录成功(IP 10.8.2.31)
209:15:22audit警告guest 尝试访问 /admin/config 被拒绝
309:16:01audit错误guest 连续 5 次失败,触发临时封禁
409:20:44audit成功admin 修改权限组「运营」成功

工具栏「下载」导出的是当前过滤后的日志(先过滤关键字再下载即可只留关注的片段)。

审计场景一键下载当前过滤结果为 .log 文件。

换行模式(长堆栈) ​

全部级别
2 条
114:02:11错误TypeError: Cannot read properties of undefined (reading 'orderId') at renderOrder (/app/src/views/order/List.vue:132:19) at callWithErrorHandling (/app/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js:199:19)
214:02:12警告组件 OrderList 渲染异常已由错误边界捕获,页面其余模块不受影响
wrap 开启换行完整展示超长堆栈(此时关闭虚拟滚动,适合中低频日志)。

Props ​

属性名类型默认值说明
logs(string | BizLogItem)[][]日志集合,字符串与结构化条目可混用
heightnumber320视口高度(px)
auto-scrollbooleantrue新日志到达时自动滚动到底(工具栏可关)
show-toolbarbooleantrue是否展示工具栏
show-line-numbersbooleantrue是否展示行号
show-downloadbooleantrue是否展示下载按钮
line-heightnumber22行高(虚拟滚动基准)
wrapbooleanfalse换行模式(关闭虚拟滚动)
ts
interface BizLogItem {
  time?: string      // 时间戳文本(业务侧格式化)
  level?: 'debug' | 'info' | 'success' | 'warning' | 'danger'
  tag?: string       // 附加标签(网关名 / 线程名)
  message: string    // 正文(必填)
}

Expose ​

名称类型说明
scrollToTop() => Promise<void>滚动到顶部
scrollToBottom() => Promise<void>滚动到底部
clearFilter() => void清空关键字与级别过滤
filteredCountComputedRef<number>当前过滤后条数