Node.js + Expressでロギングしてみる
最低、月1でなんか書こうという目標をすっかり忘れていました。
今回はNode.js + ExpressでWebアプリを作っているので、ログ周りの実装について書いてみます。
参考にしたのはこちら。
http://www.yoheim.net/blog.php?q=20130903
といっても調べようと思った事が、ほとんどこちらの記事に書かれていたので僕はこんな感じで作ってみましたという話になります。
さっくり要点だけ書くと
・Expressはロギング機能が貧弱かつデフォルトの設定がstdoutにログが出力するだけ。
・log4js(https://github.com/nomiddlename/log4js-node)というlog4jっぽいモジュールがnpmで用意されている。作成者様に感謝感謝。
・Expressでlog4jsを使えばいいじゃん
というわけで試してみた
基本的な使い方は以下の通りです。
var log4js = require('log4js'); var logger = log4js.getLogger({ "appenders": [ { "type": "file", "filename": "relative/path/to/log_file.log" } ] }); logger.debug("Some debug messages");
log4jsモジュールを読み込んでloggerオブジェクトを作成してメソッドを呼ぶという感じです。
これをモジュール毎に書くのはしんどいので、logger用のモジュールを作りました。
logger.js
var log4js = require('log4js'); log4js.configure('config/log4js.json'); var loggerApp = log4js.getLogger('app'), loggerErr = log4js.getLogger('error'), loggerAcs = log4js.getLogger('access'); // expressに渡すアクセスログ設定 exports.accessConfig = log4js.connectLogger(loggerAcs, { level: log4js.levels.INFO }); // アプリケーションログ exports.info = function(InStr){ loggerApp.info(InStr); }; // エラーログ(警告レベル) exports.warn = function(InStr){ loggerErr.warn(InStr); }; // エラーログ(エラーレベル) exports.error = function(InStr){ loggerErr.error(InStr); }; // エラーログ(緊急レベル) exports.fatal = function(InStr){ loggerErr.fatal(InStr); };
config/log4js.json
{ "appenders": [ { // アプリケーション用のログ "type": "dateFile", "filename": "log/app.log", "pattern": "-yyyy-MM-dd", "maxLogfSize":20480, "backups":10, "category":"app" }, { // アクセスログ "type": "dateFile", "filename": "log/access.log", "pattern": "-yyyy-MM-dd", "maxLogfSize":20480, "backups":10, "category":"access" }, { // エラーログ "type": "dateFile", "filename": "log/error.log", "pattern": "-yyyy-MM-dd", "maxLogfSize":20480, "backups":10, "category":"error" } ] }
configではトレースログ、アクセスログ、エラーログを設定します。日単位でサイクルする設定です。
loggerモジュールではそれぞれのログのlog4js.loggerオブジェクトを作成して内部で保持し、ログ出力用の関数をレベル毎に作って、それぞれの関数の中でログの出力先を分けているという感じです。
使う時はこんな感じです。
app.js
// ロガー読み込み var logger = require('logger'); // アプリケーション設定 app.configure(function(){ // Expressデフォルトのロガーはコメントアウト // app.use(express.logger('dev')); // log4jsとexpressをつなげる app.use(logger.accessConfig); // これでアクセスログがstdoutでなく指定したログファイルに出力されるようになります。 });
他のjs
var logger = require('logger'); try{ // トレースログ出力 logger.info('porc start'); // 何か処理 }catch(e){ // エラーログ出力 logger.fatal(e); }
いじょー。なんか間違ってたり上手いやり方があったら教えて下さい。
はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-
- 作者: 松島浩道
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/03/15
- メディア: 大型本
- クリック: 15回
- この商品を含むブログ (5件) を見る