NestJS で LogにStack情報を追加する

NestJS で LogにStack情報を追加する

NestJS

概要

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 のログにスタック情報を追加する方法をご紹介しました。デバックが楽になるので良かったら追加してみてください。