跳到主要内容

日志记录

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

Prisma Client 支持两种类型的日志记录

信息

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

信息

如果你想要详细了解 Prisma Client 在各个操作级别的性能,请参阅 追踪

日志记录到 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) 类型和可用属性 取决于日志级别。