私はrestify
を使用してAPIを構築しており、express
に慣れています。 restify
がapp.use(express.logger('dev'))
で行うように、コンソールですべてのリクエストをexpress
に記録させる方法はありますか?
これは、すべてのリクエストをログに記録する非常に骨の折れるRestify/Bunyanの例です。
_'use strict';
var Logger = require('bunyan'),
restify = require('restify'),
log = new Logger.createLogger({
name: 'app-name',
serializers: {
req: Logger.stdSerializers.req
}
}),
server = restify.createServer({
name: 'app-name',
version: '0.1.0',
log: log
});
server.pre(function (request, response, next) {
request.log.info({ req: request }, 'REQUEST');
next();
});
server.get('/', function (request, response, next) {
response.send('It worked!');
next();
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
_
これの鍵はserver.pre()
呼び出しです。
1つのターミナルウィンドウで起動し、別のターミナルウィンドウでcurlリクエストを実行します。動作した応答と、要求のログエントリが表示されます。
いくつかのことを想定しています:
server.js
_という名前のファイルに入れますあなたは以下を行う/見るでしょう:
ターミナルウィンドウ1
_$ node server.js
app-name listening at http://0.0.0.0:8080
{"name":"app-name","hostname":"leeloo.local","pid":97387,"level":30,"req":{"method":"GET","url":"/","headers":{"user-agent":"curl/7.30.0","Host":"localhost:8080","accept":"*/*"},"remoteAddress":"127.0.0.1","remotePort":60870},"msg":"REQUEST","time":"2014-04-21T17:55:52.487Z","v":0}
_
ターミナルウィンドウ2
_$ curl localhost:8080/
"It worked!"
_
誰かが私の_package.json
_を見たい場合は、これらすべてを要点にまとめることができます。
Expressで使用される Morgan ロガーミドルウェアを使用することもできます。 Restifyは意図的にExpressから多額の借用をしているので、構成はまったく同じです。
使用サーバーの例 は次のようになります。
var restify = require('restify');
var logger = require('morgan')
var server = restify.createServer({
name: 'myapp',
version: '1.0.0'
});
server.use(logger('dev'));
server.use(restify.acceptParser(server.acceptable));
server.use(restify.queryParser());
server.use(restify.bodyParser());
server.get('/echo/:name', function (req, res, next) {
res.send(req.params);
return next();
});
server.listen(8080, function () {
console.log('%s listening at %s', server.name, server.url);
});
このようになる:
開発環境で使用したいだけの場合は、すばやく実行する方法があります。
/**
* Log requests.
*/
server.on('after', function(req, res, route, error) {
console.log("------------------------")
console.log(req.route.path)
console.log(req.body)
});
デフォルトでは、restify
は Bunyan ロガーを使用します。再確認ドキュメントから
RequestLogger定義した他のパラメーターとともに、現在のリクエストIDが入力された子bunyanロガーを設定します。
server.use(restify.requestLogger({
properties: {
foo: 'bar'
},
serializers: {...}
}));
これにオプションを渡すことはできません。その場合、リクエストIDのみが追加され、シリアライザーは追加されません(これも最もパフォーマンスが高くなります)。サーバーの作成時に作成されたロガーが親ロガーとして使用されます。