如何在日志访问NGINX文件中添加控制台输出Node.js app?

时间:2016-07-24 11:41:23

标签: node.js nginx systemd

我有一个使用systemd设置的Node.js应用程序。应用程序在NGINX后面运行。
我想在日志访问NGINX文件中添加我的Node.js应用程序的控制台输出?
我怎么能这样做?

提前致谢。

4 个答案:

答案 0 :(得分:4)

更简单的方法是挂钩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);

您也可以在上面的代码中通过将console.error更改为stdout来定义strerr的挂钩。

P.S。我没有nginx来验证代码。所以代码可能包含错误:)

答案 1 :(得分:1)

简要说明:

使用JFile包,文件记录可以如下顺利进行:

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

详情:

添加登录两者的函数(终端+ nginx日志),然后直接使用它而不是console.log

var customLog=function(message){

     console.log(message);
     logNginx(message);
}

然后,实现在 customLog 中调用的 logNginx

    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,这样可以快速处理文件。

答案 2 :(得分:0)

您可以在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

答案 3 :(得分:0)

如果您将Node作为systemd进程运行,而console.log转到stdout(我相信这是默认值),而您的目标只是看日志(或将它们放在磁盘上的某个地方),比所有这些Node干预和挂接更简单的方法。

您应该已经可以访问控制台日志,而无需通过 ID Year ColA 0 1 2007 0 1 2 2008 0 2 2 2009 1 3 3 2007 0 4 4 2010 0 5 4 2011 1 6 4 2011 1 进行任何操作。例如,我的s​​ystemd单位文件(在此示例中为journalctl)看起来像这样:

/etc/systemd/system/myapp.service

运行[Unit] Description=My Webapp [Service] WorkingDirectory=/srv/webapp-dir ExecStart=/usr/local/bin/node server.js Restart=always RestartSec=5 Environment=NODE_ENV=production PORT=1984 User=myuser Group=myuser [Install] WantedBy=multi-user.target 会显示我应用程序的控制台日志。

如果需要,还可以使用一些其他参数将这些日志发送到syslog。我还添加了以下内容到我的journalctl -u myapp目录中:

[Service]

这将导致我的日志进入标记为StandardOutput=syslog StandardError=syslog SyslogIdentifier=myapp 的系统日志,如果我想使用myapp过滤,则可以将其过滤到自己的日志中。