跳至主要内容

日志记录

使用 PrismaClient log 参数配置 日志级别,包括警告、错误以及发送到数据库的查询的信息。

Prisma 客户端支持两种类型的日志记录

信息

你也可以使用 DEBUG 环境变量在 Prisma 客户端中启用调试输出。有关更多信息,请参阅 调试

信息

如果你想要深入了解 Prisma 客户端在单个操作级别上的性能,请参阅 追踪

日志记录到 stdout

将所有日志级别打印到 stdout 的最简单方法是传入一个 LogLevel 对象数组

const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error'],
})

这是传入一个 LogDefinition 对象数组的简写形式,其中 emit 的值始终为 stdout

const prisma = new PrismaClient({
log: [
{
emit: 'stdout',
level: 'query',
},
{
emit: 'stdout',
level: 'error',
},
{
emit: 'stdout',
level: 'info',
},
{
emit: 'stdout',
level: 'warn',
},
],
})

基于事件的日志记录

要使用基于事件的日志记录

  1. emit 设置为 event 以用于特定日志级别,例如查询
  2. 使用 $on() 方法订阅事件

以下示例订阅所有 query 事件并将 durationquery 写入控制台

const prisma = new PrismaClient({
log: [
{
emit: 'event',
level: 'query',
},
{
emit: 'stdout',
level: 'error',
},
{
emit: 'stdout',
level: 'info',
},
{
emit: 'stdout',
level: 'warn',
},
],
})

prisma.$on('query', (e) => {
console.log('Query: ' + e.query)
console.log('Params: ' + e.params)
console.log('Duration: ' + e.duration + 'ms')
})
显示CLI结果
Query: SELECT "public"."User"."id", "public"."User"."email", "public"."User"."name" FROM "public"."User" WHERE 1=1 OFFSET $1
Params: [0]
Duration: 3ms
Query: SELECT "public"."Post"."id", "public"."Post"."title", "public"."Post"."authorId" FROM "public"."Post" WHERE "public"."Post"."authorId" IN ($1,$2,$3,$4) OFFSET $5
Params: [2, 7, 18, 29]
Duration: 2ms

确切的 事件 (e) 类型和可用的属性 取决于日志级别。