3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NestJSとPrismaでクエリログを出力する

Posted at

はじめに

業務の関係でNestJS + Prismaの構成を触っていた際にクエリログを見たくなりました。
公式ドキュメントにはnew PrismaClient()の宣言時に設定できるような記述はあるものの、NestJSでの利用時にはコンストラクタにPrismaServiceを記述して利用するためnew PrismaClient()の記述がありません。

参考

そのため、方法が分からず困ったのですが、無事に解決したのでメモしておきます。

前提

以下の環境で試しています。

  • nest: 10.2.1
  • prisma: 5.7.0
  • @prisma/client: 5.7.0

方法

prisma.service.tsを以下のように編集することでログ出力が可能です。

import { Injectable, Logger, OnModuleInit } from '@nestjs/common'
import { Prisma, PrismaClient } from '@prisma/client'

@Injectable()
export class PrismaService extends PrismaClient<Prisma.PrismaClientOptions, 'query'> implements OnModuleInit {
  private readonly logger = new Logger(PrismaService.name)
  constructor() {
    super({
      log: [
        {
          emit: 'event',
          level: 'query',
        },
      ],
    })
  }

  async onModuleInit() {
    this.$on('query', (event) => {
      this.logger.log(
        `Query: ${event.query}`,
        `Params: ${event.params}`,
        `Duration: ${event.duration} ms`,
      )
    })
    await this.$connect()
  }
}

出力例

[Nest] 2616  - 2024/04/11 14:25:20     LOG [PrismaService] Query: SELECT `develop`.`reservations`.`id` FROM `develop`.`reservations` WHERE `develop`.`reservations`.`id` IN (?,?)
[Nest] 2616  - 2024/04/11 14:25:20     LOG [PrismaService] Params: ["cltwbp5qr001sfi7r0vpstbz4","cluc8lp9b000e132hgz9pwkee"]
[Nest] 2616  - 2024/04/11 14:25:20     LOG [PrismaService] Duration: 1 ms

参考

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?