Node.js OpsWorks 层控制台日志
Posted
技术标签:
【中文标题】Node.js OpsWorks 层控制台日志【英文标题】:Node.js OpsWorks Layer console logs 【发布时间】:2015-03-26 19:55:22 【问题描述】:我有一个带有 Node.js 层和 Node.js 应用程序的 Opsworks 堆栈。我想知道是否有人知道我的应用程序的控制台日志在 ubuntu 14.04LTS 实例上的哪个位置打印。我知道 opsworks 使用 monit 来运行我的应用程序,但我不确定它将日志输出到哪里。
谢谢!
【问题讨论】:
【参考方案1】:除非 console.log 的行为被改变,node
将把 console.log
日志输出到应用程序的标准输出 (stdout
)。
如果您在控制台中运行节点应用程序或使用 ssh,您应该会在那里看到日志。
否则,请尝试将应用程序的标准输出重定向到一个文件,这样即使您在没有控制台的情况下运行它也可以看到它,方式如下:
node myapp.js > logfile
首选方法是用户 Forever 以确保您的应用程序始终处于打开状态,并且您可以将输出(stdout 和 stderr)重定向如下:
/>forever -o forever.out -e forever.err myapp.js
【讨论】:
【参考方案2】:太烦人了,在 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'"
【讨论】:
谢谢!是的,这很奇怪,他们不会将输出发送到任何地方。 感谢瑞恩威尔科克斯!我在aws-cookbook-boilerplate 中添加了类似的覆盖。 谢谢你 - 但是当你 SSH 到实例时,你如何访问日志以及在哪里查找它?谢谢! @Leo 日志将保存在 /srv/www/YOUR APP NAME/current/log/production 。 (或者我所做的,将该文件挂钩以由 AWS CloudWatch Log 或类似服务进行监控,以便您可以使用 Web UI。 非常感谢,@RyanWilcox【参考方案3】:我通过执行以下操作找到了日志(类似于@RyanWilcox 的评论):
-
我在 /srv/www/APP NAME/current/ 中找到了我的“当前”部署
列出文件,我可以看到日志目录符号链接(日志应该是
符号链接到 /srv/www/APP NAME/shared/log 之类的东西
我在尝试 cd 到这个目录时遇到了权限问题,所以我
使用命令“sudo”切换到没有密码的超级用户
su" 然后我就可以访问目录了
终于在logs目录下,可以看到nodejs的控制台日志了
对于 STDERR 和 STDOUT
...鲍勃的父亲是你父亲的父亲。
【讨论】:
【参考方案4】:你可以在app目录中找到它然后你会发现这个路径shared/log
例如:/srv/www/my_app/shared/log
【讨论】:
以上是关于Node.js OpsWorks 层控制台日志的主要内容,如果未能解决你的问题,请参考以下文章
如何配置 OpsWorks 以部署非官方支持的 Node.js 版本?