Я использую restify
для создания API, и я привык к express
. Есть ли способ иметь restify
регистрировать каждый запрос в консоли, например express
с app.use(express.logger('dev'))
?
Есть ли способ зарегистрировать каждый запрос в консоли с повторением?
Ответ 1
Вот пример с редкими/бунианскими костями, которые будут регистрировать каждый запрос:
'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()
.
Запустите его в одном окне терминала и выполните запрос на завивание в другом окне терминала. Вы увидите ответ, который он сработал, и запись в журнале для запроса.
Предполагая несколько вещей:
- У вас есть файл package.json, который установит bunyan и восстановит
- Вы помещаете код выше в файл с именем
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
, я могу все это выразить в сущности.
Ответ 2
Вы также можете использовать Morgan промежуточное ПО протокола, используемое в Express. Поскольку Reify намеренно сильно зависит от 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);
});
Как выглядит:
Ответ 3
Что касается использования RequestLogger, см. этот комментарий в :
"Этот плагин не регистрирует каждый отдельный запрос. Используйте плагин Audit Logging или настраиваемое промежуточное программное обеспечение для этого использования.
Аудит ведения журнала (docs)
Журналирование аудита - это специальный плагин, поскольку вы не используете его с .use(), но с событием after:
server.on('after', restify.auditLogger({
log: bunyan.createLogger({
name: 'audit',
stream: process.stdout
})
}));
Ответ 4
По умолчанию restify
использует Bunyan регистратор. Из документа подтверждения
RequestLogger Устанавливает дочерний логгер bunyan с текущим запросом id заполняется вместе с любыми другими параметрами, которые вы определяете.
server.use(restify.requestLogger({
properties: {
foo: 'bar'
},
serializers: {...}
}));
Вы не можете передать никакие опции, и в этом случае будет добавлен только идентификатор запроса, а добавление сериализаторов (это также самый результативный); журнал, созданный во время создания сервера, будет используется в качестве родительского регистратора.
Ответ 5
Существует быстрый способ сделать это очень быстро, если вы просто хотите использовать его для своей среды разработки.
/**
* Log requests.
*/
server.on('after', function(req, res, route, error) {
console.log("------------------------")
console.log(req.route.path)
console.log(req.body)
});
Ответ 6
Я написал что-то для этого. Он все еще развивается, но, похоже, он работает до сих пор. npm install restify-dev-logger, затем
var logger = require("restify-dev-logger");
var restify = require("restify");
var srv = restify.createServer(...);
srv.use(logger.dev);
Или что-то в этом роде. Там также logger.devbw, который не имеет довольно ярких цветов.
UPDATE: мой пакет поврежден (не уверен, почему), но работоспособная замена находится здесь: https://groups.google.com/forum/?hl=en&fromgroups#!topic/restify/iLRiYz3Fko0