增强器

增强器概览

使用增强器为广泛事件添加派生上下文,如用户代理、地理数据、请求大小和跟踪上下文。支持内置增强器和自定义增强器。

Enrichers 在事件发出后、到达排放适配器之前,为广泛事件添加派生上下文。使用它们可以自动从请求头中提取有用信息,而不会使应用程序代码变得杂乱。

Enrichers 工作原理

Enrichers 钩入 evlog:enrich 事件,该事件在广泛事件发出后、evlog:drain 钩子之前触发。Enricher 接收事件和请求元数据,并可以修改事件以添加派生字段。

请求 → emit() → evlog:enrich → evlog:drain
                    ↑ enrichers      ↑ adapters
                    添加上下文      发送到服务
server/plugins/evlog-enrich.ts
import { createUserAgentEnricher, createGeoEnricher } from 'evlog/enrichers'

export default defineNitroPlugin((nitroApp) => {
  const enrichers = [
    createUserAgentEnricher(),
    createGeoEnricher(),
  ]

  nitroApp.hooks.hook('evlog:enrich', (ctx) => {
    for (const enricher of enrichers) enricher(ctx)
  })
})

Enrich Context

每个 enricher 都接收一个包含以下字段的 EnrichContext

字段类型描述
eventWideEvent发出的广泛事件(可变)
requestobject请求元数据(methodpathrequestId
headersobject安全的 HTTP 请求头(敏感头会被过滤)
responseobject响应元数据(statusheaders
安全性: 敏感头(如 authorizationcookiex-api-key 等)会被自动过滤,永远不会传递给 enricher。

可用 Enrichers

用户代理

从用户代理头解析浏览器、操作系统和设备类型。

地理位置

从平台头中提取国家、地区、城市和坐标。

请求大小

从 Content-Length 头捕获请求和响应有效负载大小。

跟踪上下文

从 traceparent 头提取 W3C 跟踪上下文(traceId、spanId)。

自定义

为任何派生上下文编写自己的 enricher。

覆盖行为

默认情况下,enricher 会保留现有字段。如果应用程序代码已经设置了 event.userAgent,enricher 不会覆盖它。传递 { overwrite: true } 可更改此行为:

enricher-factory-options.ts
createUserAgentEnricher({ overwrite: true })
请参阅 Next.js 指南 以了解实际实现。

下一步