框架

框架集成

为 Nuxt、Next.js、SvelteKit、Hono、Express 或其他列出的框架选择 evlog 集成。按照其设置和请求日志器访问指南操作。

从下表中选择你的框架。log.set()createError()parseError() 使用相同的核心 API,而初始化和请求日志器访问取决于具体集成。一些技术栈提供模块或中间件,其他技术栈则需要按照其指南中的手动设置进行配置。

没有 HTTP 框架?对于脚本、库和 worker,请使用 Standalone TypeScript;在边缘环境中请使用 Cloudflare Workers

选择你的框架

框架导入类型日志器访问状态
Nuxtevlog/nuxt模块useLogger(event)稳定
Next.jsevlog/next工厂useLogger()稳定
SvelteKitevlog/sveltekit钩子event.locals.log / useLogger()稳定
Nitroevlog/nitro模块useLogger(event)稳定
TanStack Startevlog/nitro/v3模块useRequest().context.log稳定
TanStack Routerevlog/nitro/v3模块通过 TanStack Start(使用 Nitro v3)稳定
React Routerevlog/react-router中间件context.get(loggerContext) / useLogger()稳定
NestJSevlog/nestjs模块useLogger()稳定
Expressevlog/express中间件req.log / useLogger()稳定
Honoevlog/hono中间件c.get('log') / useLogger()稳定
Fastifyevlog/fastify插件request.log / useLogger()稳定
Elysiaevlog/elysia插件log(上下文)/ useLogger()稳定
oRPCevlog/orpc处理器包装器 + 中间件context.log / useLogger()稳定
Cloudflare Workersevlog/workers工厂createWorkersLogger()稳定
AWS Lambdaevlog手动createLogger() / createRequestLogger()指南
Standaloneevlog手动createLogger() / createRequestLogger()稳定
Astroevlog手动createRequestLogger()指南
Customevlog/toolkit自行构建createMiddlewareLogger()Beta

不同框架之间的差异

每个框架有两点不同:如何启动 evlog,以及处理器如何获取请求日志器。

启动 evlog

模式框架
evlog(options) 中间件 / 插件Hono、Express、Fastify、Elysia、SvelteKit、React Router
createEvlog(options) 工厂Next.js
EvlogModule.forRoot()NestJS
模块默认导出Nuxt、Nitro v2/v3
手动工厂Cloudflare Workers(createWorkersLogger)、Standalone、AWS Lambda、Astro

从处理器中获取日志器

模式框架
useLogger(event)Nuxt、Nitro
useLogger()Next.js、NestJS、Express、Fastify、Elysia、SvelteKit、React Router、Hono
c.get('log')Hono
req.logExpress
request.logFastify
event.locals.logSvelteKit
context.get(loggerContext)React Router
createRequestLogger() / createLogger()Standalone、Workers、手动设置
在 Hono 中,请在处理器内部使用 c.get('log'),并在下层使用来自 evlog/honouseLogger()。请参阅 Hono 集成

全栈框架

Nuxt

在模块中注册 evlog/nuxt,即可获得自动导入的 useLoggercreateErrorparseError

Next.js

createEvlog() 工厂函数,配合 withEvlog() 处理器包装器和客户端提供器使用。

SvelteKit

处理函数与错误处理钩子,日志作用域绑定在 event.locals.log

Nitro

适用于 Nitro v2 和 v3 的模块,提供基于插件的排水和增强钩子。

TanStack Start

使用带有异步上下文的 Nitro v3 模块,因此 useLogger() 可以在服务器函数中使用。还涵盖 TanStack Router(全栈模式)。

React Router

中间件配合 context.get(loggerContext)useLogger(),适用于加载器与服务。

NestJS

EvlogModule.forRoot() 提供全局中间件、异常过滤器与异步配置。

服务端框架

Express

中间件配合 req.log 和四参数错误处理器。

Hono

中间件配合通过 EvlogVariables 实现的类型化 c.get('log')

Fastify

插件形式提供 request.log,会遮蔽 Fastify 内置的 pino 日志器。

Hono

中间件配合通过 EvlogVariables 实现的类型化 c.get('log')

Fastify

插件形式提供 request.log,会遮蔽 Fastify 内置的 pino 日志器。

Elysia

插件形式提供 log,通过 Elysia 的 derive 注入路由上下文。

oRPC

处理器包装器 + 过程级中间件,暴露 context.log 和每个过程的 operation

Cloudflare Workers

工厂函数用于创建具有 Cloudflare 上下文的作用域日志记录器。

AWS Lambda

每个运行时执行一次 initLogger;每次调用执行 createLogger(适用于 SQS、事件、HTTP API)。

Standalone

适用于脚本、CLI 工具、队列以及任意 TypeScript 进程。

自定义集成

使用 evlog 工具包 API 自行构建中间件。
所有框架都支持相同的功能:wide eventsstructured errorsdrain adaptersenricherssampling 以及 AI SDK integration

在构建时移除客户端日志

对于任何基于 Vite 的项目,evlog/vite 插件 都会添加构建时优化:

  • 自动初始化:无需手动调用 initLogger()
  • 调试剥离:生产环境中自动移除 log.debug()
  • 源码位置:在日志调用中注入 __source: 'file:line'

它适用于 SvelteKit、通过 vite-node 使用的 Hono,以及任何由 Vite 驱动的设置。在 Nuxt 中,同样的三个选项位于 evlog/nuxt 模块中,因此无需手动添加该插件。