Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 8833

zone.jsを使用してexpressでリクエストIDを出力するミドルウェアの作成

$
0
0

zone.jsを使用してアクセス毎にユニークな識別子をログへ出力する

expressではアクセス毎にリクエストIDを発行する機能はなく、自前で用意する必要があります。
そこで、Nginx or UUIDv4を使用してリクエストID毎にユニークな識別子を用意します。
リクエスト毎に値を保持する必要があるので、zone.jsを使用し持ち回れるようにしておきます。
nginxでrequest_id
uuid
zone.jsについて

logger.js
'use strict';require('zone.js');constuuidv4=require('uuid/v4');constmoment=require('moment');exports.middleware=function(req,res,next){constprop={name:'requestId',properties:{requestId:req.header('x-request-id')||uuidv4()}};Zone.current.fork(prop).run(next);};exports.out=function(text){constreqId=Zone.current.get('requestId');console.log(`[${moment().format("YYYY-MM-DD HH:mm:ss.SS")}(${reqId})] ${text}`);};
app.js
constlogger=require('./middleware/logger');app.use(logger.middleware);
index.js
varexpress=require('express');varrouter=express.Router();constlogger=require('../middleware/logger');router.get('/',function(req,res,next){logger.out(`リクエスト受信 params => 【${req.query.example}】`);// 確認用に遅れてレスポンスを返すsetTimeout(function(){logger.out(`レスポンス送信 params => 【${req.query.example}】`);res.json({test:'Hello'});},Math.floor(Math.random()*1000));});module.exports=router;

確認

UUIDをリクエストパラメータにつけて複数アクセスをしてログを確認してみる。

[2019-12-09 23:34:05.76(8355c676546235af1cac5d31989d5e5a)] リクエスト受信 params => 【d951a794-11cd-45c8-966f-07f20594de2f】
[2019-12-09 23:34:05.79(30cd941018ec1a704c68177a49f746d2)] リクエスト送信 params => 【ab255a13-83fb-4bf2-9264-525524a5080b】
~~~~~~~~~~~~~~~~~省略~~~~~~~~~~~~~~~~
[2019-12-09 23:34:06.35(4de3ed283bbab693587359c7a53166b7)] リクエスト受信 params => 【e923b5b4-c07b-42e4-a050-56cc3526ddd3】
[2019-12-09 23:34:06.35(63cfc0e59444a18e5858e6b8cb53b6ff)] リクエスト受信 params => 【ea76cd1f-ca91-4d2d-88ad-158fdd31fc37】
[2019-12-09 23:34:06.40(8355c676546235af1cac5d31989d5e5a)] リクエスト送信 params => 【d951a794-11cd-45c8-966f-07f20594de2f】

8355c676546235af1cac5d31989d5e5aのリクエストがパラメータのUUID一致で表示されています。


Viewing all articles
Browse latest Browse all 8833

Trending Articles