Как добавить консольные выходы приложения Node.js в файл NGINX для доступа к журналу?

У меня есть приложение Node.js, настроенное с помощью systemd. Приложение работает за NGINX.
Я хотел бы добавить консольный вывод моего приложения Node.js в файл NGINX доступа к журналу?
Как я могу это сделать ?

Заранее спасибо.

Более простой способ – hook console.log и вызвать console.log как обычно.

 var util = require('util'); var JFile = require("jfile"); var nxFile = new JFile('/var/log/nginx/access.log'); ... process.stdout.write = (function(write) { return function(text, encoding, fd) { write.apply(process.stdout, arguments); // write to console nxFile.text += util.format.apply(process.stdout, arguments) + '\n'; // write to nginx } })(process.stdout.write); 

Также вы можете определить hook для console.error , изменив stdout на strerr в коде выше.

PS У меня нет nginx для проверки кода. Поэтому код может содержать ошибки 🙂

Краткая информация:

Используя пакет JFile , регистрация файлов может быть гладкой:

 nxFile.text+='\n'+message; 

Детали :

Добавьте функцию, которая регистрируется на обоих (Terminal + nginx log), а затем используйте ее вместо непосредственного использования console.log :

 var customLog=function(message){ console.log(message); logNginx(message); } 

Затем реализуем logNginx, который вызывается внутри customLog :

  var JFile=require('jfile'); // "npm install jfile --save" required let nxFile=new JFile('/var/log/nginx/access.log'); // check path before if exist in your system . IF no , change it with the available path function logNginx(message){ nxFile.text+='\n'+message; //append new line in nginx log file } 

Не забудьте установить JFile npm install jfile который быстро обрабатывает файлы.

Вы можете добавить следующий код в свой скрипт nginx. Это должно работать

 env NODE_BIN=/usr/bin/node env SCRIPT_FILE="server.js" env LOG_FILE=/var/log/logfilename.log env RUN_AS="root" $RUN_AS -- $NODE_BIN $SCRIPT_FILE >> $LOG_FILE 2>&1