跳到主要內容

記錄

使用 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) 類型和可用的屬性取決於記錄層級。