NestJS Bull 将错误记录到 Sentry
NestJS Bull Log errors to Sentry
我最近将 Bull 添加到我的项目中以卸载诸如将文档同步到第 3 方服务之类的事情,并且一切正常,除了处理作业时发生的错误不会在 Sentry 中结束。他们只自己登录作业,但由于我们 运行 我们的应用程序具有多种配置,这意味着我必须不断监视所有这些实例以查找作业处理错误。
我知道我可以向处理器添加错误处理程序,但我已经有很多处理器了,所以我更喜欢另一个更全球化的解决方案
有什么方法可以确保这些错误也发送到 Sentry?
我无法找到全局执行此操作的方法,但我能够创建一个基本处理器 class 来实现 OnQueueFailed Event Listener 并向哨兵报告失败。我的所有处理器都继承自它,它似乎运行良好。
基础Class:
import { OnQueueFailed } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import * as Sentry from '@sentry/node';
import { Job } from 'bull';
export abstract class BaseProcessor {
protected abstract logger: Logger;
@OnQueueFailed()
onError(job: Job<any>, error: any) {
Sentry.captureException(error);
this.logger.error(
`Failed job ${job.id} of type ${job.name}: ${error.message}`,
error.stack,
);
}
}
处理器:
import { InjectQueue, Process, Processor } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import { Job, Queue } from 'bull';
import { BaseProcessor } from 'src/common/BaseProcessor';
import { BULL_QUEUES } from 'src/common/queues';
@Processor(BULL_QUEUES.SOME_QUEUE_NAME)
export class SomeProcessor extends BaseProcessor {
protected readonly logger = new Logger(SomeProcessor.name);
constructor(
// dependencies
) {
super();
}
@Process()
async processTask(job: Job) {
// processor code here
}
}
我最近将 Bull 添加到我的项目中以卸载诸如将文档同步到第 3 方服务之类的事情,并且一切正常,除了处理作业时发生的错误不会在 Sentry 中结束。他们只自己登录作业,但由于我们 运行 我们的应用程序具有多种配置,这意味着我必须不断监视所有这些实例以查找作业处理错误。
我知道我可以向处理器添加错误处理程序,但我已经有很多处理器了,所以我更喜欢另一个更全球化的解决方案
有什么方法可以确保这些错误也发送到 Sentry?
我无法找到全局执行此操作的方法,但我能够创建一个基本处理器 class 来实现 OnQueueFailed Event Listener 并向哨兵报告失败。我的所有处理器都继承自它,它似乎运行良好。
基础Class:
import { OnQueueFailed } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import * as Sentry from '@sentry/node';
import { Job } from 'bull';
export abstract class BaseProcessor {
protected abstract logger: Logger;
@OnQueueFailed()
onError(job: Job<any>, error: any) {
Sentry.captureException(error);
this.logger.error(
`Failed job ${job.id} of type ${job.name}: ${error.message}`,
error.stack,
);
}
}
处理器:
import { InjectQueue, Process, Processor } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import { Job, Queue } from 'bull';
import { BaseProcessor } from 'src/common/BaseProcessor';
import { BULL_QUEUES } from 'src/common/queues';
@Processor(BULL_QUEUES.SOME_QUEUE_NAME)
export class SomeProcessor extends BaseProcessor {
protected readonly logger = new Logger(SomeProcessor.name);
constructor(
// dependencies
) {
super();
}
@Process()
async processTask(job: Job) {
// processor code here
}
}