日志记录
使用 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',
},
],
})
基于事件的日志记录
要使用基于事件的日志记录
- 将
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
) 类型和可用的属性 取决于日志级别。