首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我使用自定义记录器函数而不是使用像温斯顿或log4js这样的库,节点服务器的性能会受到影响吗?

如果我使用自定义记录器函数而不是使用像温斯顿或log4js这样的库,节点服务器的性能会受到影响吗?
EN

Stack Overflow用户
提问于 2018-07-06 15:31:11
回答 1查看 1.1K关注 0票数 0

我是nodejs的新手,我正在尝试创建一个函数,用于定制格式化的日志记录到文件和控制台。下面是我为此目的使用的功能。

代码语言:javascript
复制
module.exports.log =function(req,res) 
{

res.on('finish', function() 
{

point = new Date(); 
clientIP = req.ip;
request = req.protocol + '://' + req.get('host') + req.originalUrl;
userAgent = req.get('User-Agent');
method = req.method;
statusCode = res.statusCode;


output =
"["
+point.toDateString()
+"] -- ["
+point.getHours()
+":"
+point.getMinutes()
+":"
+point.getSeconds()
+"] -- [client IP : "
+clientIP
+"] -- [user agent : "
+userAgent
+"] -- [method : "
+method
+"] -- [request : "
+request
+"] -- [response code : "
+statusCode
+"]"
;

console.log(output);
var fs = require('fs');
fs.appendFile('QAB.log', output, function (err) 
{
    if (err) throw err;
});

})

}

不知道这是不是正确的方法。我查看了像温斯顿、log4js-node等库,但我只是想自己创建它。我想知道,如果我使用温斯顿、log4js或其他什么东西,我是否会获得性能优势。

或者用不同的方式..。我做错了吗?这会影响我的节点服务器的性能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-06 16:39:24

编写自己的记录器没有什么问题,因为编写任何模仿任何npm模块的定制代码都没有问题。

我可能会建议不要编写您自己的代码,原因与我建议不要编写您自己的身份验证或安全中间件的原因相同。这些问题已经得到解决,而且足够普遍,每个人都可以使用。

在每个日志语句中写入一个文件是非常昂贵的,因为写入磁盘会给请求的处理时间增加很多时间。

此外,如果您正在编写文件,如果您考虑将所有日志存储在那里,则需要在某个时候旋转该文件,如果可能的话,最好转到syslog。

像温斯顿(https://www.npmjs.com/package/winston)这样最受欢迎的记录器可以添加一个传输,它将完成您所追求的自定义日志记录,并将以最快的方式写入文件。

如果您追求的是速度,那么pico是非常好的(https://github.com/pinojs/pino),而且速度要快得多,这取决于您要将日志发送到哪里。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51213606

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档