我有一个使用systemd设置的Node.js应用程序。应用程序在NGINX后面运行。
我想在日志访问NGINX文件中添加我的Node.js应用程序的控制台输出?
我怎么能这样做?
提前致谢。
答案 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
进行任何操作。例如,我的systemd单位文件(在此示例中为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
过滤,则可以将其过滤到自己的日志中。