如果我使用自定义记录器功能而不是使用像winston或log4js这样的库,是否会影响Node服务器的性能?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果我使用自定义记录器功能而不是使用像winston或log4js这样的库,是否会影响Node服务器的性能?相关的知识,希望对你有一定的参考价值。
我是nodejs的新手,我正在尝试创建一个自定义格式化日志记录到文件和控制台的函数。以下是我为此目的使用的功能。
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;
});
})
}
不知道这是否是正确的方法。我检查了像winston,log4js-node等库。但我只是想我会自己创建它...我想知道如果我使用winston,log4js或其他东西我是否会获得性能优势。
或者以不同的方式表达它。我做错了吗?这会影响我的节点服务器的性能吗?
编写自己的记录器没有任何问题,因为编写任何模拟任何npm模块的定制代码都没有问题。
我可能会建议不要编写自己的,因为我建议不要编写自己的身份验证或安全中间件。这些问题已经解决,并且足够通用,供所有人使用。
在每个日志语句中编写文件非常昂贵,因为写入磁盘会为请求的处理时间增加大量时间。
此外,如果您要写入文件,如果您考虑将所有日志存储在那里,则需要在某个时刻轮换文件,如果可以,最好转到syslog。
像winston(https://www.npmjs.com/package/winston)这样最受欢迎的记录器可以添加一个传输,它将执行您正在进行的自定义日志记录,并将以最快的方式写入文件。
如果您追求速度,那么pico非常好(https://github.com/pinojs/pino)并且速度要快得多,具体取决于您将日志发送到哪里。
以上是关于如果我使用自定义记录器功能而不是使用像winston或log4js这样的库,是否会影响Node服务器的性能?的主要内容,如果未能解决你的问题,请参考以下文章
我可以使用自定义算法而不是循环使用 RabbitMQ 发送消息吗?