NestJSでバリデーションエラーをログ出力する設定を紹介

NestJSでは、class-validator
とclass-transformer
を組み合わせてDTOのバリデーションを行うのが一般的です。しかし、バリデーションエラーの内容はデフォルトではレスポンスに含まれるのみで、ログには出力されません。
本記事では、エラー内容をログへ出力する方法を具体的なコード付きで丁寧に解説します。開発中のデバッグや本番環境での監視にも役立つ内容です。
バリデーションパイプのカスタマイズ
まず、NestJSでバリデーションを行うのは主にValidationPipe
です。このパイプをグローバルで拡張し、エラーをログ出力する処理を追加します。
ts// main.ts
import { ValidationPipe, BadRequestException, Logger } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationError } from 'class-validator';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const logger = new Logger('Validation');
app.useGlobalPipes(
new ValidationPipe({
exceptionFactory: (errors: ValidationError[]) => {
const detailedErrors = errors.map((error) => ({
property: error.property,
constraints: error.constraints,
value: error.value,
}));
// ログに出力(console.logでも可能だがLogger推奨)
logger.warn(`Validation failed: ${JSON.stringify(detailedErrors, null, 2)}`);
return new BadRequestException(detailedErrors);
},
}),
);
await app.listen(3000);
}
bootstrap();
このコードでは、以下のポイントが重要です:
項目 | 内容 |
---|---|
exceptionFactory | バリデーションエラー発生時の処理をカスタマイズ |
Logger.warn | NestのLogger を使い、見やすくフォーマットしてログ出力 |
ValidationError | class-validator から渡されるエラー型 |
エラー例の見え方(ログ出力)
例えば以下のようなDTOがあるとします:
ts// create-user.dto.ts
import { IsEmail, IsNotEmpty } from 'class-validator';
export class CreateUserDto {
@IsNotEmpty()
name: string;
@IsEmail()
email: string;
}
このDTOに対して不正なリクエストが送られた場合、ログには以下のように出力されます:
css[Validation] WARN Validation failed: [
{
"property": "email",
"constraints": {
"isEmail": "email must be an email"
},
"value": "not-an-email"
}
]
開発中にも本番でも使える見やすさと内容の濃さを両立しています。
さらに便利にするテクニック
- エラーログの出力先を変更:ファイルや外部サービス(Datadog, Sentry)へ転送可能
- ログレベルの切り替え:環境変数によって
debug
/warn
を切り替える実装もおすすめ - リクエスト情報も付加:
Interceptor
でreq.body
もログに含めると調査しやすくなります
まとめ
NestJSでのバリデーションログ出力は、ValidationPipe
のexceptionFactory
をカスタマイズすることで簡単に実現できます。
以下がポイントです:
ポイント | 内容 |
---|---|
ValidationPipe | グローバルに適用する |
exceptionFactory | エラーをログ出力するために必須 |
Logger | Nest標準でフォーマットも整うため推奨 |
ValidationError | 実際のエラー構造を元に見やすく出力 |
ログでバリデーションの詳細を追えるようになることで、開発・運用の品質が大きく向上します。
記事Article
もっと見る- article
2025年JavaScriptで使える時間操作ライブラリを比較!日付処理の最適解とは?
- article
NestJSで作成したAPIのレスポンスヘッダーに付与されるx-powered-by: Express を消す方法を紹介
- article
Next.jsで環境変数に別の変数を利用し柔軟に管理するdotenv-expandの活用法を紹介
- article
【2025年3月版】Cursor ProとAPI利用比較。 Claude・GPT-4o・o1・GPT-4.5の損益分岐点と選び方
- article
フォーム入力情報からZodを利用してDTO作成しへ変換処理を実施するやり方を紹介
- article
Zodバリデーションのエラーメッセージを日本語化すやり方を紹介