Rails 3.2 will have tagged logging so you can stamp your logs with subdomains (among other things). Until then you can use the Notifications API as follows.
In app/controllers/application_controller.rb:
# Put this before your other filters
before_filter :instrument_subdomain
private
def instrument_subdomain
ActiveSupport::Notifications.instrument 'subdomain.action_controller', :subdomain => request.subdomain
end
In config/initializers/notifications.rb:
ActiveSupport::Notifications.subscribe 'subdomain.action_controller' do |name, start, finish, id, payload|
Rails.logger.info "Subdomain: #{payload[:subdomain].presence || '[none]'}"
end
Now your logs will show each request’s subdomain. For example:
Started GET "/dashboard" for 123.456.42.153 at 2011-11-24 10:43:52 +0000
Processing by DashboardsController#show as HTML
Subdomain: bigclient
Rendered dashboards/show.html.haml within layouts/account (15.4ms)
Completed 200 OK in 97ms (Views: 16.1ms | ActiveRecord: 32.3ms | Sphinx: 0.0ms)
This lets you see who’s doing what when you browse the logs.
In terms of bang for the buck, or utility per line of code, this was one of my better commits.