LoginSignup
56
50

More than 5 years have passed since last update.

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

Last updated at Posted at 2015-06-02

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"
});

以上。

56
50
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
56
50