概要
NestJS のログにスタック情報を追加します。
デバック時にどこで落ちているか確認をする際、ログからスタック情報を参照出来るのと便利です。
なお、今回はNestJS の環境が構築されている前提でご説明します。
実装方法
HttpExceptionsFilter を実装
NestJSの Exception filtersは例外処理をキャッチし、その例外処理にカスタムの機能を追加することができます。
今回は その Exception filtersを用いて、例外が発生する度にスタック情報をログに出力するようにします。
1import { ArgumentsHost, Catch, HttpException, Logger } from '@nestjs/common';
2import { BaseExceptionFilter } from '@nestjs/core';
3
4@Catch(HttpException)
5export class HttpExceptionsFilter extends BaseExceptionFilter {
6 private readonly logger = new Logger(HttpExceptionsFilter.name);
7
8 catch(exception: HttpException, host: ArgumentsHost): void {
9 super.catch(exception, host);
10 const status = exception.getStatus();
11
12 if (status >= 500) {
13 this.logger.error(exception.stack);
14 } else {
15 this.logger.warn(exception.stack);
16 }
17 }
18}
exceptionにはエラー情報が含まれます。その情報にスタックが含まれるので、それをログに出力するようにしています。ステータスが500以下は重要度的にもLogLevelをwarn
にしています。
MainにHttpExceptionsFilterを設定
HttpExceptionsFilter をグローバルに適用するようにします。
1const { httpAdapter } = app.get(HttpAdapterHost);
2app.useGlobalFilters(new HttpExceptionsFilter(httpAdapter));
実行結果
以下のようにエラー発生すると以下のログが出力されていれば成功です!
1[Nest] 2513 - 2021/10/31 14:31:08 WARN [HttpExceptionsFilter] UnauthorizedException: Unauthorized
2... エラー箇所のスタック
まとめ
NestJS のログにスタック情報を追加する方法をご紹介しました。デバックが楽になるので良かったら追加してみてください。