日誌
使用 PrismaClient 的 log 引數來配置 日誌級別,包括警告、錯誤以及傳送到資料庫的查詢資訊。
Prisma Client 支援兩種型別的日誌記錄
- 日誌記錄到 stdout(標準輸出) (預設)
- 基於事件的日誌記錄(使用
$on()方法訂閱事件)
資訊
你也可以使用 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',
},
],
})
基於事件的日誌記錄
要使用基於事件的日誌記錄
- 將特定日誌級別(例如 `query`)的
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)型別和可用屬性取決於日誌級別。