##概要
Node.jsのexpressベースのWebアプリで、リクエストIDをログ出力します。
今回、log4js、request-contextを使用しました。
request-contextで、リクエスト毎にリクエストIDを保持します。
log4jsのtokensに、リクエストIDをセットして、patternでリクエストIDを出力するようにしています。
##参照情報
参考にさせていただいたページは下記です。
##注意点
request-contextは、下記の通り、Node.jsのdeprecatedになっているdomainに依存しています。参照先2でも指摘されており、より詳しく記載されています。
request-context
See the Domain Docs for further information on error handling for domains. Note that the domain module is pending deprecation!
##サンプルコード
今回は、リクエスト毎に、uuidでリクエストを発行するようにしています。
contextService.setのところでリクエストIDを保持させています。
const express = require('express');
const app = express();
const contextService = require('request-context');
const uuid = require('uuid/v4');
const logger = require("./logger").logger();
app.use(contextService.middleware('request'));
app.use((req, res, next) => {
const requestId = uuid();
contextService.set('request:requestId', requestId);
logger.info("Start API.", req.method, req.originalUrl);
next();
});
app.get('/', function (req, res) {
res.send('hello world');
logger.info("End API.");
})
app.listen(3000)
getRequestIdで、保持しているリクエストIDを取得しています。
layoutのpatternの%x{requestId}がリクエストIDです。
const log4js = require("log4js");
const contextService = require('request-context');
const getRequestId = function() {
return contextService.get('request:requestId');
};
log4js.configure({
appenders: {
console:{
type:'console',
layout:{
type:'pattern',
pattern:'[%d] [%x{requestId}] %[[%p]%] [%c] %m',
tokens: {
requestId: getRequestId
}
}
}
},
categories:{
default:{appenders:['console'], level:'info'}
}
});
exports.logger = function(){
const logger = log4js.getLogger('default');
return logger;
};
##ログ出力結果
下記のようにリクエスト毎に、リクエストIDが出力されます。
[2019-11-26T11:24:46.451] [ef9b0c23-53f2-4c7b-bce3-0def665fbc08] [INFO] [default] Start API. GET /
[2019-11-26T11:24:46.460] [ef9b0c23-53f2-4c7b-bce3-0def665fbc08] [INFO] [default] End API.
[2019-11-26T11:24:49.588] [4af4ffed-a22f-4b81-806a-1cdcff4b7c22] [INFO] [default] Start API. GET /
[2019-11-26T11:24:49.590] [4af4ffed-a22f-4b81-806a-1cdcff4b7c22] [INFO] [default] End API.
[2019-11-26T11:24:51.226] [360033c9-e6eb-405c-b3a7-6ac9e20b3fa4] [INFO] [default] Start API. GET /
[2019-11-26T11:24:51.227] [360033c9-e6eb-405c-b3a7-6ac9e20b3fa4] [INFO] [default] End API.
[2019-11-26T11:24:53.371] [048a8ce6-1bd8-4514-89df-aa467419e0ce] [INFO] [default] Start API. GET /
[2019-11-26T11:24:53.372] [048a8ce6-1bd8-4514-89df-aa467419e0ce] [INFO] [default] End API.