heroku - how to see all the logs
Solution 1:
Update (thanks to dawmail333):
heroku logs -n 1500
or, to tail the logs live
heroku logs -t
Heroku log documentation
If you need more than a few thousand lines you can Use heroku's Syslog Drains
Alternatively (old method):
$ heroku run rails c
File.open('log/production.log', 'r').each_line { |line| puts line }
Solution 2:
Logging has greatly improved in heroku!
$ heroku logs -n 500
Better!
$ heroku logs --tail
references: http://devcenter.heroku.com/articles/logging
UPDATED
These are no longer add-ons, but part of the default functionality :)
Solution 3:
Heroku treats logs as time-ordered streams of events. Accessing *.log
files on the filesystem is not recommended in such an environment for a variety of reasons.
First, if your app has more than one dyno then each log file only represents a partial view into the events of your app. You would have to manually aggregate all the files to get the full view.
Second, the filesystem on Heroku is ephemeral meaning whenever your dyno is restarted or moved (which happens about once a day)the log files are lost. So you only get at most a day's view into that single dyno's logs.
Finally, on the Cedar stack running heroku console
or even heroku run bash
does not connect you to a currently running dyno. It spawns a new one specifically for the bash
command. This is called a one-off process. As such, you won't find the log files for your other dynos that are running the actual http processes on the one spawned for heroku run
.
Logging, and visibility in general, is a first-class citizen on Heroku and there are several tools that address these issues. First, to see a real-time stream of application events across all dynos and all layers of the application/stack use the heroku logs -t
command to tail output to your terminal.
$ heroku logs -t
2010-09-16T15:13:46-07:00 app[web.1]: Processing PostController#list (for 208.39.138.12 at 2010-09-16 15:13:46) [GET]
2010-09-16T15:13:46-07:00 app[web.1]: Rendering template within layouts/application
2010-09-16T15:13:46-07:00 heroku[router]: GET myapp.heroku.com/posts queue=0 wait=0ms service=1ms bytes=975
2010-09-16T15:13:47-07:00 app[worker.1]: 2 jobs processed at 16.6761 j/s, 0 failed ...
This works great for observing the behavior of your application right now. If you want to store the logs for longer periods of time you can use one of the many logging add-ons that provide log retention, alerting and triggers.
Lastly, if you want to store the log files yourself you can setup your own syslog drain to receive the stream of events from Heroku and post-process/analyze yourself.
Summary: Don't use heroku console
or heroku run bash
to view static log files. Pipe into Heroku's stream of log events for your app using heroku logs
or a logging add-on.
Solution 4:
Well, the above answers are very helpful it will help you to view from the command line. Whereas if you want to check from GUI so you have to log into your Heroku account and then select your application and finally click on view logs
Solution 5:
Also see individual streams/filters.
E.g tail only your application logs
heroku logs --source app -t
Or see only the router logs
heroku logs --ps router
Or chain them together
heroku logs --source app --ps worker
So good..