blog.unresolved.xyzblog.unresolved.xyz

NestJS + PrismaでSQLをログに出す方法

Sun Sep 10 2023
  • Prisma
  • NestJS

以下のようにします。

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

@Injectable()
export class PrismaService
  extends PrismaClient<Prisma.PrismaClientOptions, Prisma.LogLevel>
  implements OnModuleInit
{
  constructor() {
    super({ log: ['query', 'info', 'warn', 'error'] });
  }

  private readonly logger = new Logger(PrismaService.name);

  async onModuleInit() {
    if (config().nodeEnv !== 'production') {
      this.$on('query', (event) => {
        this.logger.log(
          `Query: ${event.query}`,
          `Params: ${event.params}`,
          `Duration: ${event.duration} ms`,
        );
      });
      this.$on('info', (event) => {
        this.logger.log(`message: ${event.message}`);
      });
      this.$on('error', (event) => {
        this.logger.log(`error: ${event.message}`);
      });
      this.$on('warn', (event) => {
        this.logger.log(`warn: ${event.message}`);
      });
    }
    await this.$connect();
  }
}

参考にさせていただきました