Express4 + log4jsでロギング

            <h1>Express4 + log4jsでロギング</h1>

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

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(&#039;log4js&#039;);
var config = require(&#039;config&#039;);

log4js.configure(config.log4js);

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

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

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

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

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

以上。

qiitaにも投稿しています