Expressでmorganとlog4jsを利用してロギング処理を検討する
morgan
expressにはmorganというログのライブラリーが標準で用意されています。
実装例
lib/morgan.jsファイルを作成する
const morgan = require('morgan');
const fs = require('fs')
const path = require('path')
morgan.accessLogStream = fs.createWriteStream(path.join(__dirname, '../logs/access.log'), { flags: 'a' })
module.exports = morgan;
index.jsファイルに下記のように記述する
const morgan = require('./lib/morgan.js')
app.use(morgan('combined', { stream: morgan.accessLogStream }))
ログ出力内容 例
::ffff:192.168.128.5 - - [02/May/2020:21:23:23 +0000] "GET /vpn/index.html HTTP/1.0" 404 153 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0" ::ffff:192.168.128.5 - - [02/May/2020:22:44:03 +0000] "GET / HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36" ::ffff:192.168.128.5 - - [02/May/2020:22:44:05 +0000] "GET / HTTP/1.0" 304 - "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36" ::ffff:122.209.124.33 - - [02/May/2020:22:44:10 +0000] "GET / HTTP/1.1" 200 4 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36" ::ffff:192.168.128.5 - - [02/May/2020:22:44:13 +0000] "GET / HTTP/1.0" 200 4 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36" ::ffff:35.163.121.1 - - [02/May/2020:22:45:05 +0000] "GET / HTTP/1.1" 200 4 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36"
log4js
以前から利用されており、現在はmorganより人気がありませんが、個人的には好きなので、こちらを利用しております。
実装例
lib/logger.js
const log4js = require('log4js');
log4js.configure({
appenders: {
console: { type: 'console', filename: './logs/app.log'},
app: { type: 'dateFile', filename: './logs/app.log' },
},
categories: {
default: { appenders: [ 'console','app' ], level: 'ALL' },
}
});
module.exports = {
access: log4js.connectLogger(log4js.getLogger('app')),
app: log4js.getLogger('app')
};
index.js
app.use(logger.access);
app.get('/api', (req, res) => {
logger.app.debug({
name: "test",
message: "hello"
});
res.send(ads);
})
ログ出力内容 例
[2020-05-03T01:06:21.709] [DEBUG] app - { name: 'test', message: 'hello' }
[2020-05-03T01:06:21.718] [INFO] app - 122.209.124.33 - - "GET /api HTTP/1.0" 304 - "" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36"