[Node.js]Express4 + log4jsでロギング

  • 47
    Like
  • 1
    Comment
More than 1 year has passed since last update.

Express4 + log4jsでロギング

兎にも角にも「ログ」は大事。

Express4 + log4jsでロギングをつくっていく。
まずはlog4jsモジュールのインストール。

npm install log4js --save

用意するログの種類は以下の通りとする。

category 用途
access アクセスログ
error エラーログ
system 上記二つに当てはまらないもの

各ログの設定を作るのだが、例によって環境によって動作を変えたいと思う。
例えば、本番環境ではデバッグ用のログは吐き出す必要はない。

環境ごとに設定をつくる方法はExpress4で環境ごとの設定をつくるに書いたので参考に。

vi config/development.json
{
  "log4js": {
    "appenders": [{
      "category": "access",
      "type": "dateFile",
      "filename": "/tmp/access.log",
      "pattern": "-yyyy-MM-dd",
      "backups": 3
    },
    {
      "category": "system",
      "type": "dateFile",
      "filename": "/tmp/system.log",
      "pattern": "-yyyy-MM-dd",
      "backups": 3
    },
    {
      "category": "error",
      "type": "dateFile",
      "filename": "/tmp/error.log",
      "pattern": "-yyyy-MM-dd",
      "backups": 3
    },
    {"type": "console"}],
    "levels": {
      "access": "ALL",
      "system": "ALL",
      "error": "ALL"
    }
  }
}

appendars要素にログの種類分の設定をしている。

要素 内容
category 種類を特定できる文字列
type console(コンソール) file(ファイル) dateFile(rotate付ファイル)
filename 出力先ファイル名
pattern dateFileの場合のファイル末尾のパターン
backups 過去分としてのこしておくログファイル数

appendars要素に {"type": "console"} も設定しておくと、ファイル書き出しと同時にコンソールにも表示してくれて便利。

levels要素は対象のログ種類で、どのレベル以上のログを書き出し可能かを制御できる。

レベル 内容
ALL 全てのログが書き出される
DEBUG DEBUG以上のログが書き出される
INFO INFO以上のログが書き出される
WARN WARN以上のログが書き出される
ERROR ERROR以上のログが書き出される

設定を読み込んでロガーを初期化するコードを毎回書くのが面倒なので、モジュール化しておく。

mkdir modules
vi modules/logger.js
var log4js = require('log4js');
var config = require('config');

log4js.configure(config.log4js);

module.exports = { 
  access: log4js.getLogger('access'),
  system: log4js.getLogger('system'),
  error: log4js.getLogger('error'),
  express: log4js.connectLogger(log4js.getLogger('access'), {level: log4js.levels.INFO})
};

最後にExpressのデフォルトロガーをlog4jsに変更する。

vi app.js
...
...
// デフォルトはmorganというモジュールを使っているので、コメントアウトして作成したモジュールを使う。
//var logger = require('morgan');
var logger = require('./modules/logger');
...
...
// app.use(logger('dev'))している行をコメントアウトして、logger.expressをapp.useする
//app.use(logger('dev'));
app.use(logger.express);

ここまで出来ればあとは使うだけ。

var logger  = require('./modules/logger');
logger.system.info({
  name: "tnnsst35",
  message: "byebye"
});

以上。