我正在开发一个API,它会进行大量的调用,其中一些需要根据各种原因进行彻底的日志记录。会记录要求个别良好的做法或混乱?
现在,我记录了在函数中发生的所有输入/输出/处理,并且API完美地工作,所以似乎没有必要增加日志记录的数量。
但是,一个想法是我的想法后面是为每个传入的API调用分配一个UUID,这将跟随内部函数中的日志记录。
虽然它会创建相当数量的附加参数来跟踪每个函数中的UUID,但我想知道这是否是常见做法,并且如果在需要出现之前应该实施它,并且要做的更改量是可管理的。
例:
显然,真正的代码要复杂得多,并且记录
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);
为了不使用console.log
:
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:通常的做法是记录每个请求的粒度级别,还是保留给特定用例?
是否有任何工具可以自动执行,我不应该在代码中关心它?
我想跟进服务器内部的请求,作出回答的人的电话。我不需要在不同的服务器之间关注它。此外,Logging已经发送到服务器,我使用'console.log'来不显示代码连接和设置日志格式。 – DrakaSAN
你可以试试这个:对node.js的http://github.com/winstonjs/winston – Remario
多传输异步日志库,你可以使用某种模块的日志记录 - 比如'winston' - 他们有很多的插件的支持完全不同的传输并专门为该puprose进行操作 - 配置日志记录,记录uncaughtExceptions,创建适当的访问日志(即您想要的)。 ELK可以是本地的 - 简单地根据你在OP中的要求 - 这是一个完美的匹配。本地ELK可以以非常简单的方式安装 - 使用docker-compose。 – BlackStork