Skip to content

Commit ccc0ea9

Browse files
committed
structured logs for prisma events
1 parent 43104e3 commit ccc0ea9

File tree

1 file changed

+122
-16
lines changed

1 file changed

+122
-16
lines changed

apps/webapp/app/db.server.ts

Lines changed: 122 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,21 @@ function getClient() {
122122
url: databaseUrl.href,
123123
},
124124
},
125-
// @ts-expect-error
126125
log: [
126+
// events
127127
{
128-
emit: "stdout",
128+
emit: "event",
129129
level: "error",
130130
},
131+
{
132+
emit: "event",
133+
level: "info",
134+
},
135+
{
136+
emit: "event",
137+
level: "warn",
138+
},
139+
// stdout
131140
{
132141
emit: "stdout",
133142
level: "info",
@@ -136,16 +145,60 @@ function getClient() {
136145
emit: "stdout",
137146
level: "warn",
138147
},
139-
].concat(
140-
process.env.VERBOSE_PRISMA_LOGS === "1"
148+
...((process.env.PRISMA_ERRORS_STDOUT_ENABLED === "1"
149+
? [
150+
{
151+
emit: "stdout",
152+
level: "error",
153+
},
154+
]
155+
: []) satisfies Prisma.LogDefinition[]),
156+
// verbose
157+
...((process.env.VERBOSE_PRISMA_LOGS === "1"
141158
? [
142-
{ emit: "event", level: "query" },
143-
{ emit: "stdout", level: "query" },
159+
{
160+
emit: "event",
161+
level: "query",
162+
},
163+
{
164+
emit: "stdout",
165+
level: "query",
166+
},
144167
]
145-
: []
146-
),
168+
: []) satisfies Prisma.LogDefinition[]),
169+
],
147170
});
148171

172+
client.$on("info", (log) => {
173+
logger.info("PrismaClient info", {
174+
clientType: "writer",
175+
timestamp: log.timestamp,
176+
message: log.message,
177+
target: log.target,
178+
});
179+
});
180+
181+
client.$on("warn", (log) => {
182+
logger.warn("PrismaClient warn", {
183+
clientType: "writer",
184+
timestamp: log.timestamp,
185+
message: log.message,
186+
target: log.target,
187+
});
188+
});
189+
190+
// Only use structured logging for errors if we're not already logging them to stdout
191+
if (process.env.PRISMA_ERRORS_STDOUT_ENABLED !== "1") {
192+
client.$on("error", (log) => {
193+
logger.error("PrismaClient error", {
194+
clientType: "writer",
195+
timestamp: log.timestamp,
196+
message: log.message,
197+
target: log.target,
198+
});
199+
});
200+
}
201+
149202
// connect eagerly
150203
client.$connect();
151204

@@ -174,12 +227,21 @@ function getReplicaClient() {
174227
url: replicaUrl.href,
175228
},
176229
},
177-
// @ts-expect-error
178230
log: [
231+
// events
179232
{
180-
emit: "stdout",
233+
emit: "event",
181234
level: "error",
182235
},
236+
{
237+
emit: "event",
238+
level: "info",
239+
},
240+
{
241+
emit: "event",
242+
level: "warn",
243+
},
244+
// stdout
183245
{
184246
emit: "stdout",
185247
level: "info",
@@ -188,16 +250,60 @@ function getReplicaClient() {
188250
emit: "stdout",
189251
level: "warn",
190252
},
191-
].concat(
192-
process.env.VERBOSE_PRISMA_LOGS === "1"
253+
...((process.env.PRISMA_ERRORS_STDOUT_ENABLED === "1"
254+
? [
255+
{
256+
emit: "stdout",
257+
level: "error",
258+
},
259+
]
260+
: []) satisfies Prisma.LogDefinition[]),
261+
// verbose
262+
...((process.env.VERBOSE_PRISMA_LOGS === "1"
193263
? [
194-
{ emit: "event", level: "query" },
195-
{ emit: "stdout", level: "query" },
264+
{
265+
emit: "event",
266+
level: "query",
267+
},
268+
{
269+
emit: "stdout",
270+
level: "query",
271+
},
196272
]
197-
: []
198-
),
273+
: []) satisfies Prisma.LogDefinition[]),
274+
],
199275
});
200276

277+
replicaClient.$on("info", (log) => {
278+
logger.info("PrismaClient info", {
279+
clientType: "reader",
280+
timestamp: log.timestamp,
281+
message: log.message,
282+
target: log.target,
283+
});
284+
});
285+
286+
replicaClient.$on("warn", (log) => {
287+
logger.warn("PrismaClient warn", {
288+
clientType: "reader",
289+
timestamp: log.timestamp,
290+
message: log.message,
291+
target: log.target,
292+
});
293+
});
294+
295+
// Only use structured logging for errors if we're not already logging them to stdout
296+
if (process.env.PRISMA_ERRORS_STDOUT_ENABLED !== "1") {
297+
replicaClient.$on("error", (log) => {
298+
logger.error("PrismaClient error", {
299+
clientType: "reader",
300+
timestamp: log.timestamp,
301+
message: log.message,
302+
target: log.target,
303+
});
304+
});
305+
}
306+
201307
// connect eagerly
202308
replicaClient.$connect();
203309

0 commit comments

Comments
 (0)