参考

配置

此处列出了所有 evlog 选项,包括全局日志记录器设置,以及优先级高于全局设置的框架覆盖选项

evlog 有两个配置面,本页面将分别介绍:启动时设置一次的全局选项,以及按框架集成分别设置的中间件选项

全局选项(initLogger

这些选项适用于所有框架。对于独立框架(Hono、Express、Fastify、Elysia、NestJS、SvelteKit、Cloudflare Workers),在应用启动时调用一次 initLogger()。对于 Nuxt 和 Nitro,这些选项通过模块配置设置并自动传递。

src/index.ts
import { initLogger } from 'evlog'
import { createAxiomDrain } from 'evlog/axiom'

initLogger({
  enabled: true,
  env: { service: 'my-api', environment: 'production' },
  pretty: false,
  silent: false,
  stringify: true,
  minLevel: 'info',
  sampling: { rates: { info: 10 }, keep: [{ status: 400 }] },
  drain: createAxiomDrain(),
})
选项类型默认值描述
enabledbooleantrue全局启用或禁用所有日志记录。当为 false 时,所有操作都变为空操作
envPartial<EnvironmentContext>自动检测环境上下文覆盖项(见下文)
prettyboolean开发环境中为 true使用树形格式进行美化输出。根据 NODE_ENV 自动检测
dev'evlog' | 'nitro' | 'both' | object美化开发环境中为 'evlog'开发终端预设,或 { frameworkOverlay, prettyError },请参见调整开发终端输出
silentbooleanfalse禁止控制台输出。事件仍会被构建、采样并传递给排水适配器
stringifybooleantrue在禁用 pretty 时输出 JSON 字符串。在 Cloudflare Workers 中设置为 false
minLevel'debug' | 'info' | 'warn' | 'error''debug'仅适用于全局 log API 的最低严重级别(不适用于 createLogger / 请求范围事件)。顺序:debug < info < warn < error
samplingSamplingConfigundefined头部和尾部采样配置。请参见采样
redactboolean | RedactConfig生产环境中为 true在生产环境中默认启用。设置为 false 可禁用。使用对象进行细粒度控制。请参见自动脱敏
drain(ctx: DrainContext) => voidundefined用于向外部服务发送事件的排水回调

RedactConfig 字段(当 redact 为对象时):paths(带通配符的点号表示法)、patterns(针对字符串值的正则表达式)、builtinsreplacement(字符串,或根据匹配值计算替换内容的函数)、transform(用于条件策略的钩子)。完整表格请参见自动脱敏

minLevel 与采样的区别

  • minLevel 是简单 log.* API 上的硬阈值:低于该阈值的级别永远不会输出。它不适用于来自 useLogger / createLogger().emit() 的宽事件,请使用 sampling.rates(以及尾部采样的 keep)控制请求量
  • 头部采样sampling.rates)针对简单日志中已经通过 minLevel 的内容进行概率采样

log.info / log.debug / 等调用的求值顺序为:enabledminLevel → 头部采样 → 输出。

调整开发终端输出

美化错误块仅在 pretty: true 时运行(开发环境中的默认值)。生产环境始终输出 JSON 宽事件,不包含堆栈片段,也不会读取磁盘。

使用 dev 来控制两个相互独立的轴:Nitro 的 Youch 覆盖层是否运行,以及 evlog 在宽事件中打印多少堆栈细节。

预设(推荐):

预设Nitro 覆盖层evlog 错误块
'evlog'(美化开发环境中的默认值)关闭完整——位置、片段、堆栈尾部、原因/修复
'nitro'开启仅提供指导——消息 + 原因/修复/链接(堆栈来自 Nitro)
'both'开启完整——evlog 块 + Nitro 覆盖层(调试)
nuxt.config.ts
export default defineNuxtConfig({
  modules: ['evlog/nuxt'],
  evlog: {
    pretty: true,
    dev: 'evlog', // 或 'nitro' | 'both'
  },
})

显式对象(细粒度):

nuxt.config.ts
evlog: {
  dev: {
    frameworkOverlay: true,
    prettyError: {
      snippet: false,
      stackDepth: 0,
      compact: true,
      detail: 'guidance', // 'full' | 'guidance'
    },
  },
}

请参见 Structured Errors 中的开发终端输出,了解美化错误树的示例。

在每个事件中标记环境

env 选项控制每个日志事件中包含的字段。下表列出了未设置字段时读取各字段的变量。

字段类型默认值自动检测来源
servicestring'app'SERVICE_NAME
environmentstring'development'NODE_ENV
versionstringundefinedAPP_VERSION
commitHashstringundefinedCOMMIT_SHAGITHUB_SHAVERCEL_GIT_COMMIT_SHACF_PAGES_COMMIT_SHA
regionstringundefinedVERCEL_REGIONAWS_REGIONFLY_REGIONCF_REGION

静默终端

当部署平台以标准输出为主要日志采集方式(GCP Cloud Run、AWS Lambda、Fly.io、Railway 等),且你希望由排水适配器控制输出格式时,请使用 silent

src/index.ts
import { initLogger } from 'evlog'
import { createAxiomDrain } from 'evlog/axiom'

initLogger({
  silent: process.env.NODE_ENV === 'production',
  drain: createAxiomDrain(),
})
如果启用 silent 但未设置排水适配器,事件会被构建和采样,但不会输出到任何位置,evlog 会在启动时对此发出警告。

中间件选项

这些选项传递给框架中间件/插件,用于控制每个请求的行为:包括记录哪些路由、如何排水和丰富事件,以及自定义尾部采样逻辑。

// lib/evlog.ts
import { createEvlog } from 'evlog/next'
import { createAxiomDrain } from 'evlog/axiom'

export const { withEvlog, useLogger, log, createError } = createEvlog({
  service: 'my-app',
  include: ['/api/**'],
  exclude: ['/api/health'],
  routes: { '/api/auth/**': { service: 'auth' } },
  drain: createAxiomDrain(),
  enrich: (ctx) => { ctx.event.region = process.env.FLY_REGION },
  keep: (ctx) => { if (ctx.duration > 2000) ctx.shouldKeep = true },
})
选项类型默认值描述
includestring[]undefined要记录的路由 glob 模式。未设置时记录所有路由
excludestring[]undefined要排除的路由模式。排除优先于包含
routesRecord<string, { service: string }>undefined路由级服务名称覆盖
drain(ctx: DrainContext) => voidundefined每个事件发出时调用的排水回调
enrich(ctx: EnrichContext) => voidundefined发出后、排水前调用的增强回调
keep(ctx: TailSamplingContext) => voidundefined自定义尾部采样回调
Nuxt 和 Nitro 使用模块配置和 Nitro 钩子(evlog:drainevlog:enrichevlog:emit:keep)而不是中间件选项。请参见 NuxtNitro 页面。

中间件排水与全局排水

当设置了中间件 drain 时,它会覆盖来自 initLogger() 的全局排水适配器。如果未设置中间件排水,则使用全局排水作为回退,并可获得完整的增强事件(含请求上下文,如方法、路径、头部)。

src/index.ts
import { initLogger } from 'evlog'
import { createAxiomDrain } from 'evlog/axiom'

initLogger({
  env: { service: 'my-api' },
  drain: createAxiomDrain(), // 回退:被单例 log API 和无中间件排水时使用
})

app.use(evlog({
  // 未设置排水——回退到全局排水,并携带完整请求上下文
}))

特定框架选项

某些框架拥有超出共享配置的额外选项:

Nuxt

Nuxt 模块在 nuxt.config.tsevlog 键下接受所有全局选项和中间件选项,并额外支持:

选项类型默认值描述
consolebooleantrue启用/禁用浏览器控制台输出(仅客户端)
transport.enabledbooleanfalse通过 API 端点将客户端日志发送到服务器
transport.endpointstring'/api/_evlog/ingest'自定义传输端点
transport.credentialsRequestCredentials'same-origin'请求凭据模式('include' 用于跨域端点)

查看完整的 Nuxt 配置

Nitro

Nitro 模块在 nitro.config.ts 中接受 enabledenvprettysilentsamplingincludeexcluderoutes,而排水和增强则交由 Nitro 钩子处理。

查看 Nitro 排水与增强器