ロギング
PrismaClient
のlog
パラメータを使用して、ログレベル(警告、エラー、およびデータベースに送信されたクエリに関する情報を含む)を設定します。
Prisma Clientは2種類のロギングをサポートしています
- stdoutへのロギング(デフォルト)
- イベントベースのロギング(
$on()
メソッドを使用してイベントをサブスクライブ)
情報
DEBUG
環境変数を使用して、Prisma Clientでデバッグ出力を有効にすることもできます。詳細については、デバッグを参照してください。
情報
個々の操作レベルでPrisma Clientのパフォーマンスに関する詳細な洞察が必要な場合は、トレースを参照してください。
stdoutへのログ
すべてのログレベルをstdoutに出力する最も簡単な方法は、LogLevel
オブジェクトの配列を渡すことです
const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error'],
})
これは、emit
の値が常にstdout
であるLogDefinition
オブジェクトの配列を渡す場合の短縮形です
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
)タイプと利用可能なプロパティは、ログレベルによって異なります。