Logging
Use the PrismaClient
log
parameter to configure log levels , including warnings, errors, and information about the queries sent to the database.
Prisma Client supports two types of logging:
- Logging to stdout (default)
- Event-based logging (use
$on()
method to subscribe to events)
You can also use the DEBUG
environment variable to enable debugging output in Prisma Client. See Debugging for more information.
If you want a detailed insight into your Prisma Client's performance at the level of individual operations, see Tracing.
Log to stdout
The simplest way to print all log levels to stdout is to pass in an array LogLevel
objects:
const prisma = new PrismaClient({
log: ['query', 'info', 'warn', 'error'],
})
This is the short form of passing in an array of LogDefinition
objects where the value of emit
is always stdout
:
const prisma = new PrismaClient({
log: [
{
emit: 'stdout',
level: 'query',
},
{
emit: 'stdout',
level: 'error',
},
{
emit: 'stdout',
level: 'info',
},
{
emit: 'stdout',
level: 'warn',
},
],
})
Event-based logging
To use event-based logging:
- Set
emit
toevent
for a specific log level, such as query - Use the
$on()
method to subscribe to the event
The following example subscribes to all query
events and write the duration
and query
to console:
- Relational databases
- 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')
})
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)
})
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, }, }, ])
The exact event (e
) type and the properties available depends on the log level.