OMDSCloud/dictation_server/src/common/loggerMiddleware.ts
saito.k f1583cf783 Merged PR 611: 操作を特定できる文字列を追跡用のIDに追加する(IPアドレスもログに出力する)
## 概要
[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のスクショなど
- スクショ置き場

## 動作確認状況
- ローカルで確認

## 補足
- 相談、参考資料などがあれば
2023-12-12 04:11:36 +00:00

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;
}
}