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