Я работаю над API, который совершает много вызовов, некоторые из них должны быть тщательно зарегистрированы по различным причинам.Будет ли регистрировать запрос индивидуально хорошей практики или беспорядка?
На данный момент я регистрирую все операции ввода/вывода/обработки в функции, и API работает безупречно, поэтому нет необходимости увеличивать количество протоколирования.
Но идея, которая поцарапала мои мысли, - присвоить UUID каждому входящему API-вызову, который будет следовать за регистрацией во внутренних функциях.
Хотя это создавало бы достаточное количество дополнительных параметров, чтобы следовать UUID в каждой функции, мне интересно, является ли это обычной практикой, и если я должен реализовать ее до возникновения проблемы, и в то время как количество изменений, которые нужно сделать является управляемым.
Ex:
Очевидно, что реальный код является гораздо более сложным, и не использует console.log
для входа
const express = require('express'),
fs = require('fs'),
config = require('./config.json'),
app = express();
function foo(bar, callback) {
console.log(bar);
fs.open(bar, (err, data) => {
if(err) {
console.err(err);
callback(err);
} else {
console.log(data)
callback(null, data);
}
});
}
app.get('/foo', (req, res) => {
console.log(req.body);
foo(req.body.bar, (err, result) => {
if(err) {
console.err(err);
res.send(err);
} else {
console.log(result)
res.send(null, result);
}
});
});
app.listen(config.port);
To:
const express = require('express'),
UUID = require('uuid-generator'),
fs = require('fs'),
config = require('./config.json'),
app = express();
function foo(uuid, bar, callback) {
console.log(uuid + ': ' + bar);
fs.open(bar, (err, data) => {
if(err) {
console.err(uuid + ': ' + err);
callback(err);
} else {
console.log(uuid + ': ' + data)
callback(null, data);
}
});
}
app.use((req, res, next) => {
req.id = new UUID();
next();
});
app.get('/foo', (req, res) => {
console.log(req.id + ': ' + req.body);
foo(req.id, req.body.bar, (err, result) => {
if(err) {
console.err(req.id + ': ' + err);
res.send(err);
} else {
console.log(req.id + ': ' + result)
res.send(null, result);
}
});
});
app.listen(config.port);
Про бы, что , в случае сбоя функции или в случае сбоя системы, мы могли бы точно определить, какой вызов вызвал ошибку, и какой путь он следит d более легко.
Кон, это требует незначительного объема работы для реализации, и может быть, это не так полезно, поскольку мы уже можем определить путь, следующий за различными входными/выходными данными и другими уже выполненными протоколами.
TL: DR: Обычная практика заключается в том,
Есть ли инструменты, которые автоматизируют это, и я не должен заботиться об этом в коде?
Я хочу следовать запросу внутри сервера, и звонки были сделаны для ответа на него. Мне не нужно следить за ним между разными серверами. Кроме того, ведение журнала уже отправлено на сервер, я использовал 'console.log', чтобы не показывать код, соединяющий и настраивающий формат журнала. – DrakaSAN
вы можете попробовать: многозадачная асинхронная библиотека регистрации для node.js http://github.com/winstonjs/winston – Remario
Вы можете использовать какой-то модуль для ведения журнала - например, 'winston' - у них много плагинов которые поддерживают очень разные транспорты и предназначены исключительно для этого puprose - для настройки ведения журнала, для регистрации uncaughtExceptions, для создания правильных журналов доступа (что вам нужно). ELK может быть локальным - просто в соответствии с тем, что вам требуется в вашем OP - это идеальное совпадение. Локально ELK можно было установить очень простым способом - с помощью компоновки докеров. – BlackStork