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 image

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..