Debugging and Logging Queries

1. Enabling Query Logging

const prisma = new PrismaClient({
  log: ["query", "info", "warn", "error"]
});
LevelUse
querySQL + params + duration
infoLifecycle
warnPotential issues
errorFailures

2. Using Debug Mode

Env VarDetail
DEBUG=prisma:*Internal tracing
DEBUG=prisma:clientClient only
DEBUG=prisma:engineQuery engine

3. Logging Query Parameters

prisma.$on("query", e => {
  console.log({ sql: e.query, params: e.params, duration: e.duration });
});
Event FieldDetail
querySQL text
paramsJSON-stringified array
durationms

4. Measuring Query Duration

SourceDetail
query eventPer query duration
MetricsAggregated histograms

5. Identifying Slow Queries

ToolDetail
Log thresholdLog only duration > 100ms
PG log_min_duration_statementDB-side slow log
pg_stat_statementsAggregated stats

6. Using Query Profiler

ApproachDetail
EXPLAIN ANALYZERun via $queryRawUnsafe
pganalyzeSaaS profiler
OptimizePrisma Data Platform query insights

7. Implementing Structured Logging

import pino from "pino";
const logger = pino();
prisma.$on("query", e => logger.info({ sql: e.query, ms: e.duration }, "db.query"));
LibraryDetail
pinoFast JSON logger
winstonPlug-in transports

8. Tracing Distributed Queries

ApproachDetail
OpenTelemetry@prisma/instrumentation
previewFeaturesTracing (GA in 6.x)
Span attrsdb.system, db.statement

9. Debugging in Production

PracticeDetail
SamplingLog slow + sample fast
RedactStrip params with PII
Feature flagToggle verbose logs per request

10. Using Logging Libraries

LibraryStrength
pinoPerformance
winstonTransports
bunyanStructured JSON, mature