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 | 実際のエラー構造を元に見やすく出力 |
ログでバリデーションの詳細を追えるようになることで、開発・運用の品質が大きく向上します。
- review
今の自分に満足していますか?『持たざる者の逆襲 まだ何者でもない君へ』溝口勇児
- review
ついに語られた業界の裏側!『フジテレビの正体』堀江貴文が描くテレビ局の本当の姿
- review
愛する勇気を持てば人生が変わる!『幸せになる勇気』岸見一郎・古賀史健のアドラー実践編で真の幸福を手に入れる
- review
週末を変えれば年収も変わる!『世界の一流は「休日」に何をしているのか』越川慎司の一流週末メソッド
- review
新しい自分に会いに行こう!『自分の変え方』村岡大樹の認知科学コーチングで人生リセット
- review
科学革命から AI 時代へ!『サピエンス全史 下巻』ユヴァル・ノア・ハラリが予見する人類の未来