Filter Rails SQL log in production
02.02.2015 - Thomas RitterIn order to debug a problem, which only occurred in production, we recently wanted to tweak our Rails SQL logs to only show the access to a specific table.
Here’s what we did to accomplish this. We created a file initializers/filter_sql_log.rb
with this content:
if Rails.env.production?
module ActiveRecord
class LogSubscriber
alias :old_sql :sql
def sql(event)
if event.payload[:sql].include? 'users'
old_sql(event)
end
end
end
end
end
This monkey-patches the ActiveRecord::LogSubscriber
class and only delegates to the old logging method, if the SQL statement includes the string "users"
.
By default, SQL logging is deactivated in the Rails production environment. Therefore we needed to change config/environments/production.rb
like this:
config.log_level = :debug