typescript 如何将所有异常记录到nest.js中的自定义记录器中?

jljoyd4f  于 2023-01-27  发布在  TypeScript
关注(0)|答案(2)|浏览(121)

我有一个自定义日志记录服务,它输出结构化日志的方式可以发送到第三方日志收集服务。
我想知道什么是最好的方法来确保我捕获所有的错误,从HTTP错误,到未处理的JS错误(例如,类型错误,未捕获的拒绝承诺等),并将它们发送到所说的日志记录器。
我看到的大多数示例都只解决HTTP错误。

e3bfsja2

e3bfsja21#

您可以在这里查看uncaughtException,但它与nestjs无关
https://nodejs.org/docs/latest/api/process.html#process_event_uncaughtexception
但要小心,因为这可能会破坏应用程序的稳定性
编辑
您可以利用此处所述的全局过滤器https://docs.nestjs.com/exception-filters

App.useGlobalFilters(new MyFilter())

如果要使用DI,可以使用标记将它们作为自定义提供程序添加到providers集合的appModule中

Provide: APP_FILTER,
useClass: MyFilter
wkyowqbh

wkyowqbh2#

出于日志记录的目的,您可以尝试连接一个全局拦截器:

app.useGlobalInterceptors(new YourInterceptor());

在我的例子中,我使用了内置的nestjs-pino日志拦截器:

import { Logger, LoggerErrorInterceptor } from 'nestjs-pino';

// bootstrap function
// const app = ...
const logger = app.get(Logger);

app.useLogger(logger);
app.useGlobalInterceptors(new LoggerErrorInterceptor());
// ...rest

相关问题