概要
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を保持させています。
app.js
constexpress=require('express');constapp=express();constcontextService=require('request-context');constuuid=require('uuid/v4');constlogger=require("./logger").logger();app.use(contextService.middleware('request'));app.use((req,res,next)=>{constrequestId=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です。
logger.js
constlog4js=require("log4js");constcontextService=require('request-context');constgetRequestId=function(){returncontextService.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(){constlogger=log4js.getLogger('default');returnlogger;};
ログ出力結果
下記のようにリクエスト毎に、リクエスト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.