问题
I have an Opsworks stack with a Node.js Layer and Node.js Application. I'm wondering if anyone knows where on an ubuntu 14.04LTS instance the console logs from my application are being printed to. I know the opsworks uses monit to run my application but I'm not sure where its outputting the logs to.
Thanks!
回答1:
So annoyingly enough, the Monit configuration rendered for Node.JS apps on Opsworks doesn't send the output anywhere! Source for this claim. (This surprised me when I learned about it!)
What I recommend doing is overriding that template - see the OpsWorks documentation on overriding templates: essentially all you need to do is copy paste the Monit config from Amazon, but change line 2 to redirect the output to a file, like I do below so:
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'"
回答2:
You can find it in the app directory then you will find this path shared/log
for example : /srv/www/my_app/shared/log
回答3:
I found the logs by doing the following (similar to @RyanWilcox's comment):
- I found my "current" deployment in /srv/www/{APP NAME}/current/
- listing files, I could see the log directory symlink (log should be symlinked to something like /srv/www/{APP NAME}/shared/log
- I ran into a permissions issue trying to cd to this directory, so I switched to the super user without a password using the command "sudo su" and then I could access the directory
- finally in the logs directory, I could see the nodejs console logs for STDERR and STDOUT
... and Bob's father is your father's father.
回答4:
Unless behavior of console.log was altered, node
will output console.log
logs to the application's standard output (stdout
).
If you are running your node application in a console or using ssh, you should see the logs there.
Otherwise, try redirecting the stdout of your application to a file so you can see it even if you run it without a console, in this way:
node myapp.js > logfile
A preferred way would be to user Forever to make sure you application is constantly on and there you can redirect your output (both stdout and stderr) as follows:
/>forever -o forever.out -e forever.err myapp.js
来源:https://stackoverflow.com/questions/28183395/node-js-opsworks-layer-console-logs