LoginSignup
6
5

More than 5 years have passed since last update.

Node.jsでリクエスト毎にNODE_DEBUGをコントロール

Last updated at Posted at 2014-10-14

NODE_DEBUG

DEBUGログを出すモジュールをコントロールするenvです。
expresskoaのデフォルトモジュールでもNODE_DEBUG=fooのように設定することでログを出力できるモジュールがいくつか存在する。

NODE_DEBUGの値を切り替えて再起動すると、デバッグしたいリクエスト以外のログも出てしまう。

そのため今回、2つのパッケージnode-custom-consolenode-debug-switcherを作り、このデバッグ出力をリクエスト毎に切り替えられるようにした。

node-custom-console

既存のconsoleを置き換えることでconsole.logconsole.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のように指定することで、module1infoレベル以上のログだけ出力できる。

詳細は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での組み合わせ例。

module1.js
var console = require('node-custom-console')('module1');
module.exports = function*(next) {
  console.log 'foo'
  console.info 'bar'
  yield(next);
};
server.js
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-switchersecureオプションを使うとクッキーの値に暗号化したものを使うことができる。

switcher('cookie_name', secure: true, password: 'pass')
6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5