【发布时间】:2017-02-12 21:29:40
【问题描述】:
我正在开发一个 API,它会进行大量调用,其中一些需要出于各种原因彻底记录。
目前,我记录了函数中发生的所有输入/输出/处理,并且 API 可以完美运行,因此似乎不需要增加记录量。
但我想到的一个想法是为每个传入的 API 调用分配一个 UUID,这将遵循内部函数中的日志记录。
虽然它会在每个函数中创建大量附加参数来遵循 UUID,但我想知道这是否是常见做法,是否应该在需要之前实现它,而要做的更改量是易于管理。
例如:
显然真正的代码要复杂得多,并且不使用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);
收件人:
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);
如果函数失败或系统崩溃,我们可以准确识别导致错误的调用,以及更容易遵循的路径。
缺点是,它需要大量的工作来实现,并且可能没有那么有用,因为我们已经可以从不同的输入/输出和其他已经实现的日志中推断出所遵循的路径。
TL:DR:以这种粒度级别记录每个请求是常见的做法,还是保留用于特定用例?
是否有任何工具可以自动完成并且我不应该在代码中关心它?
【问题讨论】:
标签: javascript node.js logging