Будет ли затронута производительность сервера Node, если я буду использовать собственную функцию ведения журнала вместо использования таких библиотек, как winston или log4js?

Я новичок в 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 или что-то еще.

Или, говоря по-другому.. Я делаю это неправильно? Повлияет ли это на производительность моего сервера узлов?


person JPK    schedule 06.07.2018    source источник
comment
Это действительно зависит. Также веб-сервер (Nginx) обычно уже выполняет эту работу.   -  person Estus Flask    schedule 06.07.2018


Ответы (1)


Нет ничего плохого в том, чтобы написать свой собственный регистратор, так как нет проблем с написанием любого специального кода, который эмулирует любой из модулей npm.

Я бы, вероятно, посоветовал не писать свой собственный по той же причине, что и не советовал бы писать собственное промежуточное ПО для аутентификации или безопасности. Эти проблемы уже решены и являются достаточно общими для всех.

Запись файла в каждом операторе журнала очень затратна, так как запись на диск увеличивает время обработки вашего запроса.

Кроме того, если вы пишете в файл, вам нужно будет повернуть файл в какой-то момент, если вы думаете хранить все свои журналы там, лучше всего перейти к системному журналу, если можете.

Регистраторы, такие как winston (https://www.npmjs.com/package/winston), который самый популярный может иметь добавленный транспорт, который будет выполнять пользовательское ведение журнала, которое вам нужно, и будет записывать в файл максимально быстрым способом.

Если вам нужна скорость, то pico действительно хорош (https://github.com/pinojs/pino ) и намного быстрее в зависимости от того, куда вы отправляете журналы.

person Peter Grainger    schedule 06.07.2018