2015年10月22日木曜日

node.jsでのログ出力:log4js

node.jsでのlog4jsを使ったログ出力について備忘録。

log4js

javaで使われいてるlog4のjavascript版のlog4jsをNode.jsにコンバージョンしたもの。
https://github.com/nomiddlename/log4js-node
特徴的な機能としては次のようなものがある。
  • Node.jsのConsoleログを置き換えられる
  • file appenderでは、ファイルサイズでローテーションができる
  • メール送信ができる(smtp appender)
  • logstashに送信できる(Logstash UDP appender)
  • Workerプロセス構成のときに使えるmultiprocess appender
  • それぞれのカテゴリにそれぞれのログレベルで出力を設定できる
アプリケーションのログはもちろん、Node.jsのエラーログやアクセスログの取得もできそうなので、morganよりいいんじゃないかと思って試してみる。

■インストール

まずはモジュールのインストール。
$ npm install log4js --save

次に出力設定ファイルを、外部ファイルとして作成する。
log4js_config.json
{
    "appenders": [
        {
            "type":     "File",
            "category": "system",
            "maxLogSize": 1048576,
            "backups": 3,
            "compress":true,
            "filename": "logs/system.log"
        },
        {
            "type":     "dateFile",
            "category": "access",
            "filename": "logs/access.log",
            "pattern":  "-yyyy-MM-dd"
        },
        {
            "type":     "dateFile",
            "category": "error",
            "filename": "logs/error.log",
            "pattern":  "-yyyy-MM-dd"
        },
        {
            "type":     "console",
            "category": "test"
        }
    ],
    "levels": {"system": "INFO"},
    "replaceConsole": true
}
上記を例に設定内容の記載。


appenderstypedateFileローテーション対応したファイルへの出力
fileただのファイルへの出力
consoleすべてをconsoleへの出力
category出力するログの設定の単位。カテゴリごとに設定をすることができる。
filename出力するファイルの名前
patternOutputストリーム。デフォルトは、process.stdoutになっている
maxLogSizetypeがfileの場合の最大ファイルサイズ(bytes)
backupsbackup世代数
compresstypeがfileの場合のオプションで、gzipをするかどうか?フラグ
levels出力するログレベルを設定。例では、categoryがsystemのものをINFOレベル以上で出力するという設定
replaceConsoletypeにconsoleが指定されていた場合、consoleへの出力フォーマットが通常のログ形式と同じになる設定

上記のlevelsで使用できる値は以下の通り。
ALLすべて出力
TRACETRACE 以上を出力
DEBUGDEBUG 以上を出力
INFOINFO 以上を出力
WARNWARN 以上を出力
ERRORERROR 以上を出力
FATALFATAL 以上を出力
MARKMARK 以上を出力
OFF出力しない

以下は実装例。
// モジュールの取り込み
var log4js = require('log4js');

// 設定ファイルの取り込み(ファイルは環境変数:LOG4JS_CONFIGに指定してもよい)
// reloadSecsはオプション(byou )。通常は60秒間隔で設定ファイルがReloadされる。
log4js.configure('path/log4js_config.json', { reloadSecs: 300 });

// 設定がいるを絶対パスで記載することもできる。
log4js.configure('log4js_config.json', { cwd: '/absolute/path/to/log/dir' });

// 出力するカテゴリの指定
var logger = log4js.getLogger('system');

// 出力レベルの設定(設定ファイルのlevelsに相当)
logger.setLevel('ERROR');

// 出力
logger.trace('Entering cheese testing');
logger.debug('Got cheese.');
logger.info('Cheese is Gouda.');
logger.warn('Cheese is quite smelly.');
logger.error('Cheese is too ripe!');
logger.fatal('Cheese was breeding ground for listeria.');

0 件のコメント:

コメントを投稿