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
- それぞれのカテゴリにそれぞれのログレベルで出力を設定できる
■インストール
まずはモジュールのインストール。
$ 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
}
上記を例に設定内容の記載。
appenders | type | dateFile | ローテーション対応したファイルへの出力 |
file | ただのファイルへの出力 | ||
console | すべてをconsoleへの出力 | ||
category | 出力するログの設定の単位。カテゴリごとに設定をすることができる。 | ||
filename | 出力するファイルの名前 | ||
pattern | Outputストリーム。デフォルトは、process.stdoutになっている | ||
maxLogSize | typeがfileの場合の最大ファイルサイズ(bytes) | ||
backups | backup世代数 | ||
compress | typeがfileの場合のオプションで、gzipをするかどうか?フラグ | ||
levels | 出力するログレベルを設定。例では、categoryがsystemのものをINFOレベル以上で出力するという設定 | ||
replaceConsole | typeにconsoleが指定されていた場合、consoleへの出力フォーマットが通常のログ形式と同じになる設定 |
上記のlevelsで使用できる値は以下の通り。
ALL | すべて出力 |
TRACE | TRACE 以上を出力 |
DEBUG | DEBUG 以上を出力 |
INFO | INFO 以上を出力 |
WARN | WARN 以上を出力 |
ERROR | ERROR 以上を出力 |
FATAL | FATAL 以上を出力 |
MARK | MARK 以上を出力 |
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 件のコメント:
コメントを投稿