【问题标题】:NodeJS - how to write to a file all the console.log?NodeJS - 如何将所有console.log写入文件?
【发布时间】:2018-03-09 22:09:03
【问题描述】:

在我的 CentOS 7.x 服务器上,我正在运行 Node(v6.7.0 和 v0.10.36)。

forever start /home/www/html/server/mynode.js

运行如下:

/usr/bin/node /home/www/html/server/mynode.js

mynode.js 的代码:

var http = require('http');
var net = require('net');
var url = require('url');
var io = require('socket.io').listen(3004);
io.set('log level', 1);

io.sockets.on('connection', function (socket) {
  socket.on('disconnect', function () {
    try{
      console.log(JSON.stringify(db));           
    } catch(dis) {
      console.log(dis);
    }

  });
});

我如何告诉 NodeJS 或 Linux 保留日志?这样我就可以听到tail -f /var/log/mynode.log 发生了什么?

【问题讨论】:

  • forever start /home/www/html/server/mynode.js > /var/log/mynode.log,例如
  • 我试过了,但它没有记录真正的 console.log,但它只记录永远的事件。

标签: javascript node.js bash centos


【解决方案1】:

您可以覆盖您的console.log

var fs = require('fs');

var trueLog = console.log;
console.log = function(msg) {
    fs.appendFile("/tmp/log.log", msg, function(err) {
        if(err) {
            return trueLog(err);
        }
    });
    //trueLog(msg); //uncomment if you want logs
}

只需将此 sn-p 放在您的 nodejs 代码之上。

【讨论】:

  • 我对 NodeJs 脚本有很大的责任。如果我在繁重的任务中使用 writeFile。我的脚本将执行缓慢,它会使服务慢动作。有没有更好的办法?
  • @YumYumYum 好吧,您可以使用缓冲区并在达到某个限制时进行写入,甚至可以使用触发写入。如果您需要一些帮助,请留下 PM ;)
  • 当然,您能否在答案中使用缓冲方法和另一个使用触发写入方法进行编辑?这样我就可以对您的 3 种方法进行测试和基准测试。
  • 如果 var msg 不是字符串,它会抛出错误所以你需要添加: msg = String(msg);例如,如果 msg = 3,它将抛出“msg.replace 不是函数”
【解决方案2】:

有一个捕获日志的选项 forever -o path/to/logfile start /home/www/html/server/mynode.js

来自文档-o OUTFILE Logs stdout from child script to OUTFILE

【讨论】:

  • 同样的问题。 -o 只记录永远的事件而不是 nodejs myscript.js 事件。 info: socket.io started warn: error raised: Error: listen EADDRINUSE
猜你喜欢
  • 2016-08-01
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多