禁用永久运行的node.js脚本中的日志记录

时间:2013-06-10 21:05:42

标签: node.js logging forever logfile

我正在不断地使用nodejs运行一些服务器脚本(在不同的端口上)。

其中一些服务器上存在大量流量。我用于跟踪连接异常的 console.log 命令会导致我一直不需要的膨胀日志文件 - 仅用于调试。我一直在深夜手动停止脚本,截断文件,然后重新启动它们。这不会长期,所以我们决定找到解决方案。

我的系统上的其他人在我不知情的情况下删除了我为每个服务器设置的日志文件。在命令行上调用 forever list 表明服务器脚本仍在运行,但现在我无法查看日志文件以查看节点的运行情况。

节点停机时间应保持在最低限度,因此我不愿意在白天停止服务器超过几分钟。来自客户端的初始测试似乎表明脚本运行良好,但我无法100%确定没有因尝试登录到不存在的文件失败而导致的错误

我实际上有几个问题:

  1. 这样可以永远保持运行吗?
  2. 如果没有,是否有正确的方式来禁用日志记录? github repository似乎表明永远仍然会记录到我不想要的默认文件。否则我可能只是写一个cronjob定期停止脚本,截断日志,然后重新启动脚本。
  3. 如果我只是在脚本仍在运行的情况下再次使用 touch logfile_name.log 创建日志文件会发生什么 - 这是否会让人感到非常不安或这是一个看似合理的解决方案?
  4. 感谢您的时间。

3 个答案:

答案 0 :(得分:3)

根据https://github.com/foreverjs/forever,尝试将-s传递给silent all log。

forever -s start YOURSCRIPT

当然,在此之前,请尝试永远更新到最新版本:

sudo curl -L https://npmjs.com/install.sh | sudo sh

sudo npm update -g

答案 1 :(得分:1)

有一个漂亮的工具可以帮助你调用logrotate。看看here

尤其是 copytruncate 选项,它在您的情况下非常有用。

答案 2 :(得分:1)

1)只需构建一个定期函数或admin选项即可清除永久日志。从手册forever cleanlogs

2)至少对于linux。将每个日志文件发送到/dev/null。每种日志类型都由选项-l -o-r指定。 -a的{​​{1}}选项会阻止它抱怨已存在的日志。

append log

也许使用您自己的日志记录系统,我使用forever start -a -l /dev/null -o /dev/null -r /dev/null your-server.js ,如果我在节点进程仍在运行时删除日志文件,它不会抱怨。