Spaces:
Runtime error
Runtime error
| import { Job } from 'bullmq'; | |
| import { Logger } from 'pino'; | |
| import { ILogger } from './ILogger'; | |
| /** | |
| * JobLoggerWrapper is a wrapper around the BullMQ Job class that provides | |
| * a logger with the job ID as a child context. | |
| * It allows logging messages to the job's log | |
| * and also to the logger itself. | |
| */ | |
| export class JobLoggerWrapper implements ILogger { | |
| private readonly logger: Logger; | |
| constructor( | |
| private job: Job, | |
| logger: Logger, | |
| ) { | |
| this.logger = logger.child({ jobId: job.id }); | |
| } | |
| fatal(log: string): void { | |
| this.log(log, 'fatal'); | |
| } | |
| error(log: string): void { | |
| this.log(log, 'error'); | |
| } | |
| warn(log: string): void { | |
| this.log(log, 'warn'); | |
| } | |
| info(log: string): void { | |
| this.log(log, 'info'); | |
| } | |
| debug(log: string): void { | |
| this.log(log, 'debug'); | |
| } | |
| trace(log: string): void { | |
| this.log(log, 'trace'); | |
| } | |
| private log(msg: string, level: string) { | |
| if (!this.logger.isLevelEnabled(level)) { | |
| return; | |
| } | |
| this.logger[level](msg); | |
| const timestamp = new Date().toISOString(); | |
| this.job | |
| .log(`[${timestamp}] ${level.toUpperCase()}: ${msg}`) | |
| .catch((err) => { | |
| this.logger.error('Error logging message to job', err); | |
| }); | |
| } | |
| } | |