Edited at

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

More than 3 years have 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"
});

以上。