LoginSignup
0
0

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-12-09

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

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

logger.js
'use strict';

require('zone.js');
const uuidv4 = require('uuid/v4');
const moment = require('moment');

exports.middleware = function(req, res, next) {
    const prop = {
        name: 'requestId',
        properties: {
            requestId: req.header('x-request-id') || uuidv4()
        }
    };
    Zone
        .current
        .fork(prop)
        .run(next);
};

exports.out = function(text) {
    const reqId  = Zone.current.get('requestId');
    console.log(`[${moment().format("YYYY-MM-DD HH:mm:ss.SS")}(${reqId})] ${text}`);
};

app.js
const logger = require('./middleware/logger');
app.use(logger.middleware);
index.js
var express = require('express');
var router = express.Router();

const logger = 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一致で表示されています。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0