日志记录
使用 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',
},
],
})
基于事件的日志记录
要使用基于事件的日志记录
- 将特定日志级别(例如查询)的
emit
设置为event
- 使用
$on()
方法订阅事件
以下示例订阅所有 query
事件,并将 duration
和 query
写入控制台
- 关系型数据库
- MongoDB
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
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)
})
显示CLI结果
Query: db.User.aggregate([ { $project: { _id: 1, email: 1, name: 1, }, }, ])
Query: db.Post.aggregate([ { $match: { userId: { $in: [ "622f0bbbdf635a42016ee325", ], }, }, }, { $project: { _id: 1, slug: 1, title: 1, body: 1, userId: 1, }, }, ])
确切的 事件 (e
) 类型和可用属性 取决于日志级别。