2012年12月29日土曜日

Node.jsが面白い件⑨ ログ

Javaの場合にログと言えばlog4jが有名ですが、Node.jsで使えるlog4js-nodeが公開されています。ログローテーションやコンソールでのカラー表示などを提供し、簡単な操作でログの書き込みができます。プログラムを見て行きましょう。まずはインストール。

> npm install log4js

log4jsのexample.jsを少し変えたものが以下です。

var log4js = require('log4js');

// appenderによる出力指定。log4js.jsonファイルを読み込む。
log4js.configure('log4js.json', {});

// appenderのうち、file_logを指定。
var logger = log4js.getLogger('file_log');
logger.setLevel('TRACE');

logger.trace('これはトレース');
logger.debug('これはデバグ');
logger.info('これはインフォメーション');
logger.warn('これは警告');
logger.error('これはエラー');
logger.fatal('これは致命的エラー');

これを実行すると、以下の結果が表示されます。

[2012-12-28 23:31:15.100] [TRACE] file_log - これはトレース
[2012-12-28 23:31:15.107] [DEBUG] file_log - これはデバグ
[2012-12-28 23:31:15.108] [INFO] file_log - これはインフォメーション
[2012-12-28 23:31:15.108] [WARN] file_log - これは警告
[2012-12-28 23:31:15.108] [ERROR] file_log - これはエラー
[2012-12-28 23:31:15.108] [FATAL] file_log - これは致命的エラー

本当はカラー表示されるので、実際に出力してみてください。上記の例では、最初にlog4js.jsonという別ファイルを読み込んでいます。直接このファイルに書き込む事もできますが、例のように別ファイルで記述しているとデフォルトで60秒に1度更新チェックがかかり、更新されているとリロードしてくれるので便利です(更新チェックの間隔は変更できます)。以下が今回使ったlog4js.jsonの内容です。

{
  "appenders" : [
    { "type" : "console" },
    { "type" : "file", "filename" : "file_log.log", "category" : "file_log" },
    { "type" : "dateFile", "filename" : "date_log.log", "pattern" : "-yyyy-MM-dd-hh-mm", "category" : "date_log" }
  ]

例の7行目でfile_logを呼んでいますが、appendersで2つ目に設定しているfileログです。上に示した結果はコンソールの結果ですが、file_log.logにも同様の結果が追記されています。
また、file_logではなくdate_logを指定すると、date_log.logに結果が追記されます。file_logとdate_logの違いは、appenderのタイプの違いですが、date_logは指定したpatternに基づいてログローテーションを実施してくれます。例えば上記のパターンでは分単位でログローテーションを実施してくれます(新たな書き込みがあった時に分が進んでいると新しいログファイルに書き込みます)。
最後に、setLevel()で出力するログレベルを設定できるのでデバグ作業などに便利です。

他にもいくつかappendersが作成されていますが、Multiprocessは試してみても良いかもしれません。

1 件のコメント:

  1. このブログ、ためになりますね!これから書いていく記事で重なる部分もありますが、引用するかもしれないです。
    http://blog.cloudfoundry.com/2013/01/24/scaling-real-time-apps-on-cloud-foundry-using-node-js-and-redis/

    返信削除