Node.js OpsWorks 层控制台日志

Node.js OpsWorks Layer console logs

我有一个带有 Node.js 层和 Node.js 应用程序的 Opsworks 堆栈。我想知道是否有人知道 ubuntu 14.04LTS 实例上我的应用程序的控制台日志被打印到哪里。我知道 opsworks 使用 monit 运行 我的应用程序,但我不确定它将日志输出到哪里。

谢谢!

除非 console.log 的行为被改变,node 将输出 console.log 日志到应用程序的标准输出 (stdout)。 如果您 运行 在控制台中或使用 ssh 连接您的节点应用程序,您应该会在那里看到日志。 否则,尝试将您的应用程序的标准输出重定向到一个文件,这样即使您 运行 它没有控制台,您也可以通过这种方式看到它: node myapp.js > logfile

用户 Forever 的首选方法是确保您的应用程序始终处于打开状态,并且您可以在那里重定向输出(stdout 和 stderr),如下所示:

/>forever -o forever.out -e forever.err myapp.js

非常烦人的是,为 Opsworks 上的 Node.JS 应用呈现的 Monit 配置不会将输出发送到任何地方! Source for this claim。 (当我知道的时候,这让我很惊讶!)

我建议做的是覆盖该模板 - 参见 the OpsWorks documentation on overriding templates:基本上您需要做的就是从 Amazon 复制粘贴 Monit 配置,但更改第 2 行以将输出重定向到文件,就像我这样做:

start program = "/bin/bash -c 'cd <%= @deploy[:deploy_to] %>/current ; source <%= @deploy[:deploy_to] %>/shared/app.env ; /usr/bin/env PATH=$PATH:/usr/local/bin PORT=<%= @deploy[:nodejs][:port] %> NODE_PATH=<%= @deploy[:deploy_to] %>/current/node_modules:<%= @deploy[:deploy_to] %>/current /usr/local/bin/node <%= @monitored_script %> &> <%= @deploy[:deploy_to] %>/current/log/production.log'"

我通过执行以下操作找到了日志(类似于@RyanWilcox 的评论):

  1. 我在 /srv/www/{APP NAME}/current/
  2. 中找到了我的 "current" 部署
  3. 列出文件,我可以看到日志目录符号链接(日志应该是 符号链接到 /srv/www/{APP NAME}/shared/log
  4. 我 运行 在尝试 cd 到这个目录时遇到权限问题,所以我 使用命令“sudo”切换到没有密码的超级用户 su" 然后我可以访问目录
  5. 终于在日志目录中,我可以看到nodejs控制台日志 对于 STDERR 和 STDOUT

...而 Bob 的父亲是你父亲的父亲。

你可以在app目录下找到然后你会找到这个路径shared/log

例如:/srv/www/my_app/shared/log