フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

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"