## 概要 [Task3265: IPアドレスを追跡用のIDに追加する](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/3265) - MiddlewareでUUIDを発行しリクエストのヘッダに追加する - 各コントローラーではヘッダからUUIDとIPアドレスを取得する - 取得したUUIDとADB2Cの外部IDでトラッキングIDを作成する - 作成したトラッキングIDとIPアドレスの繋がりをログに出力する。 ## レビューポイント - ADB2Cの外部IDがない場合にUnauthorized Userという文字列を入れているがほかの表現のほうが良いか - 外部IDもオプショナルにして入れなくてもよくする? - ## UIの変更 - Before/Afterのスクショなど - スクショ置き場 ## 動作確認状況 - ローカルで確認 ## 補足 - 相談、参考資料などがあれば
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { Injectable, Logger, NestMiddleware } from '@nestjs/common';
|
|
import { Request, Response } from 'express';
|
|
import { v4 as uuidv4 } from 'uuid';
|
|
|
|
@Injectable()
|
|
export class LoggerMiddleware implements NestMiddleware {
|
|
private readonly logger = new Logger(LoggerMiddleware.name);
|
|
|
|
use(req: Request, res: Response, next: () => void): void {
|
|
// ここで一意のリクエストIDを生成して、リクエストヘッダーに設定する
|
|
const requestId = uuidv4();
|
|
req.headers['x-request-id'] = requestId;
|
|
|
|
this.logger.log(this.createReqMsg(req));
|
|
|
|
res.on('close', () => {
|
|
this.logger.log(this.createResMsg(res));
|
|
});
|
|
next();
|
|
}
|
|
|
|
private createReqMsg(req: Request): string {
|
|
const message = `[${req.header('x-request-id')}] Request [url=${
|
|
req.url
|
|
}, method=${req.method}]`;
|
|
|
|
return message;
|
|
}
|
|
|
|
private createResMsg(res: Response): string {
|
|
const message = `[${res.req.header('x-request-id')}] Response [statusCode=${
|
|
res.statusCode
|
|
}, message=${res.statusMessage}]`;
|
|
|
|
return message;
|
|
}
|
|
}
|