NODE_DEBUG
DEBUGログを出すモジュールをコントロールするenvです。
express
やkoa
のデフォルトモジュールでもNODE_DEBUG=foo
のように設定することでログを出力できるモジュールがいくつか存在する。
NODE_DEBUG
の値を切り替えて再起動すると、デバッグしたいリクエスト以外のログも出てしまう。
そのため今回、2つのパッケージnode-custom-console
とnode-debug-switcher
を作り、このデバッグ出力をリクエスト毎に切り替えられるようにした。
node-custom-console
既存のconsole
を置き換えることでconsole.log
、console.warn
のような出力を以下のようにモジュール名付きでフォーマットして出力できる。
var console = require('node-custom-console')('module1');
console.log('foo', 'bar')
// > 2014-10-02T06:15:16.830Z [log] 44999 module1: foo bar
var console = require('node-custom-console')('module2');
console.info('foo', 'bar')
// > 2014-10-02T06:15:16.830Z [info] 44999 module2: foo bar
さらに、NODE_DEBUG=module1:info
のように指定することで、module1
のinfo
レベル以上のログだけ出力できる。
詳細はrepoを参照。
https://github.com/dtaniwaki/node-custom-console
node-debug-switcher
MiddlewareでCookieを利用してNODE_DEBUG
をリクエスト毎に置き換える。
以下はkoa
に使用例。
var koa = require('koa');
var switcher = require('node-debug-switcher').cookies.koa;
app = koa();
app.use(switcher('cookie_name'));
指定したcookie_name=module1:info
のようにすると、そのリクエストのみNODE_DEBUG=module1:info
で処理できる。
詳細はrepoを参照。
https://github.com/dtaniwaki/node-debug-switcher
組み合わせ
koa
での組み合わせ例。
var console = require('node-custom-console')('module1');
module.exports = function*(next) {
console.log 'foo'
console.info 'bar'
yield(next);
};
var koa = require('koa');
var switcher = require('node-debug-switcher').cookies.koa;
var module1 = require('./module1');
app = koa();
app.use(switcher('cookie_name'));
app.use(module1)
app.listen 3000
以下のように出力をコントロールできる。
$ node --harmony ./server.js &
$ curl http://localhost:3000/
$ curl -b 'cookie_name=module1:info' http://localhost:3000/
> 2014-10-02T06:15:16.830Z [info] 44999 module1: bar
$ curl -b 'cookie_name=module1:log' http://localhost:3000/
> 2014-10-02T06:15:16.830Z [log] 44999 module1: foo
> 2014-10-02T06:15:16.830Z [info] 44999 module1: bar
セキュリティ対策
node-debug-switcher
はsecure
オプションを使うとクッキーの値に暗号化したものを使うことができる。
switcher('cookie_name', secure: true, password: 'pass')