跳到主要内容

日志记录

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

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. 为特定日志级别(例如 query)将 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)类型和可用属性 取决于日志级别。