diff --git a/package.json b/package.json index 6913e2a74..b5aa7645a 100644 --- a/package.json +++ b/package.json @@ -102,6 +102,7 @@ "luxon": "^3.4.4", "node-fetch": "^3.3.2", "openid-client": "^5.6.4", + "pino": "^8.17.2", "postmark": "^4.0.2", "prisma": "^5.8.0", "yargs": "^17.7.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6d2d95444..21361a934 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -83,6 +83,9 @@ dependencies: openid-client: specifier: ^5.6.4 version: 5.6.4 + pino: + specifier: ^8.17.2 + version: 8.17.2 postmark: specifier: ^4.0.2 version: 4.0.2 @@ -4631,7 +4634,7 @@ packages: fast-json-stringify: 5.9.1 find-my-way: 7.7.0 light-my-request: 5.11.0 - pino: 8.17.0 + pino: 8.17.2 process-warning: 3.0.0 proxy-addr: 2.0.7 rfdc: 1.3.0 @@ -6871,8 +6874,8 @@ packages: resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} dev: false - /pino@8.17.0: - resolution: {integrity: sha512-ey+Mku+PVPhvxglLXMg1l1zQMwSHuNrKC3MD40EDZbkckJmmuY7DYZLIOwwjZ8ix/Nvhe9dZt5H99cgkot9bAw==} + /pino@8.17.2: + resolution: {integrity: sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==} hasBin: true dependencies: atomic-sleep: 1.0.0 @@ -6880,7 +6883,7 @@ packages: on-exit-leak-free: 2.1.2 pino-abstract-transport: 1.1.0 pino-std-serializers: 6.2.2 - process-warning: 2.3.0 + process-warning: 3.0.0 quick-format-unescaped: 4.0.4 real-require: 0.2.0 safe-stable-stringify: 2.4.3 diff --git a/src/lib/fastify/logging.ts b/src/lib/fastify/logging.ts index 7a71504fd..cb01ac119 100644 --- a/src/lib/fastify/logging.ts +++ b/src/lib/fastify/logging.ts @@ -1,12 +1,11 @@ -import type { FastifyServerOptions } from "fastify"; -import type { PinoLoggerOptions } from "fastify/types/logger.js"; +import type { LoggerOptions } from "pino"; import { env } from "~/config.js"; /** * Redact personally identifiable information (PII) from logs * to try to be GDPR compliant, and avoid storing sensitive data in logs. */ -const redact: PinoLoggerOptions["redact"] = [ +const redact: LoggerOptions["redact"] = [ "*.firstName", "*.lastName", "*.email", @@ -17,7 +16,7 @@ const redact: PinoLoggerOptions["redact"] = [ export const envToLogger: Record< "development" | "production" | "test", - Exclude + Omit > = { development: { enabled: env.LOG_ENABLED, diff --git a/src/services/mail/worker.ts b/src/services/mail/worker.ts index d2295c33c..260a60b7c 100644 --- a/src/services/mail/worker.ts +++ b/src/services/mail/worker.ts @@ -1,5 +1,6 @@ import type { User } from "@prisma/client"; import type { Processor } from "bullmq"; +import type { Logger } from "pino"; import type { MailService } from "./index.js"; type UserRepository = { @@ -9,16 +10,16 @@ type UserRepository = { const MailWorker = ( mailService: MailService, userRepository: UserRepository, + log?: Logger, ): Processor< { subject: string; receiverId: string }, { status: string }, "waitlist" | "welcome" > => { return async (job) => { + log?.info({ job: { name: job.name, data: job.data } }, "starting job"); const { subject, receiverId } = job.data; - console.log("sending email", job.name); const user = await userRepository.get(receiverId); - console.log("Sending email to", user.id); switch (job.name) { case "waitlist": await mailService.send({ diff --git a/src/worker.ts b/src/worker.ts index 44d23d9a0..c1836a990 100644 --- a/src/worker.ts +++ b/src/worker.ts @@ -1,6 +1,8 @@ import { Worker } from "bullmq"; import { Redis } from "ioredis"; +import { pino } from "pino"; import { env } from "./config.js"; +import { envToLogger } from "./lib/fastify/logging.js"; import postmark from "./lib/postmark.js"; import prisma from "./lib/prisma.js"; import { UserRepository } from "./repositories/users/index.js"; @@ -12,7 +14,7 @@ export function initWorkers() { keepAlive: 1_000 * 60 * 3, // 3 minutes maxRetriesPerRequest: 0, }); - + const logger = pino(envToLogger[env.NODE_ENV]); const mailService = new MailService(postmark, env.NO_REPLY_EMAIL); const userRepository = new UserRepository(prisma); const worker = new Worker<