lib/sapience/rails/engine.rb
# frozen_string_literal: true
require "sapience"
require "sapience/extensions/action_controller/live" if defined?(ActionController::Live)
require "sapience/extensions/action_controller/log_subscriber"
require "sapience/extensions/action_controller/notifications"
require "sapience/extensions/action_dispatch/debug_exceptions"
require "sapience/extensions/action_view/streaming_template_renderer"
if defined?(ActiveRecord)
require "sapience/extensions/active_record/log_subscriber"
require "sapience/extensions/active_record/notifications"
end
require "sapience/extensions/active_job/notifications" if defined?(ActiveJob)
require "sapience/extensions/rails/rack/logger"
require "sapience/extensions/rails/rack/logger_info_as_debug"
require "sapience/extensions/action_view/log_subscriber"
require "sapience/loggers/concurrent"
module Sapience
module Rails
class Engine < ::Rails::Engine
# Replace Rails logger initializer
::Rails::Application::Bootstrap.initializers.delete_if { |i| i.name == :initialize_logger }
initializer :initialize_logger, group: :all, before: :bootstrap_hook do
Sapience.configure
%i[active_record action_controller action_mailer action_view].each do |name|
ActiveSupport.on_load(name) { include Sapience::Loggable }
end
ActiveSupport.on_load(:action_cable) { self.logger = Sapience["ActionCable"] }
end
# Before any initializers run, but after the gems have been loaded
config.before_initialize do
# Replace the Mongoid Logger
Mongoid.logger = Sapience[Mongoid] if defined?(Mongoid)
Moped.logger = Sapience[Moped] if defined?(Moped)
# Replace the Resque Logger
Resque.logger = Sapience[Resque] if defined?(Resque) && Resque.respond_to?(:logger)
# Replace the Sidekiq logger
Sidekiq::Logging.logger = Sapience[Sidekiq] if defined?(Sidekiq)
# Replace the Sidetiq logger
Sidetiq.logger = Sapience[Sidetiq] if defined?(Sidetiq)
# Replace the Sequel logger
if defined?(Sequel::Database) && Sequel::Database.respond_to?(:logger=)
Sequel::Database.logger = Sapience[Sequel]
end
# Replace the Raven logger
# Raven::Configuration.logger = Sapience[Raven::Configuration] if defined?(Raven::Configuration)
Raven.send(:include, Sapience::Loggable)
# Replace the Sneakers logger
Sneakers.configure(log: Sapience[Sneakers]) if defined?(Sneakers)
# Replace the Bugsnag logger
Bugsnag.configure { |config| config.logger = Sapience[Bugsnag] } if defined?(Bugsnag)
# Set the logger for concurrent-ruby
Concurrent.global_logger = Sapience::Loggers::Concurrent.new if defined?(Concurrent)
end
# Before any initializers run, but after the gems have been loaded
config.after_initialize do
# in the rare case a gem disables logging but still requires a logger (teaspoon gem)
::Rails.logger ||= Sapience[::Rails]
require "sapience/extensions/action_cable/tagged_logger_proxy" if defined?(ActionCable)
require "sapience/extensions/active_model_serializers/logging" if defined?(ActiveModelSerializers)
require "sapience/extensions/active_job/logging" if defined?(ActiveJob)
# Replace the Bugsnag logger
Bugsnag.configure { |config| config.logger = Sapience[Bugsnag] } if defined?(Bugsnag)
# Make rails less noisy
Silencer.remove_log_subscriptions if Sapience.config.silent_rails
Sapience::Extensions::ActionController::LogSubscriber.attach_to :action_controller
# Sapience::Extensions::ActiveSupport::MailerLogSubscriber.attach_to :action_mailer
if defined?(ActiveRecord) && !Sapience.config.silent_active_record
Sapience::Extensions::ActiveRecord::Notifications.use
end
Sapience::Extensions::ActionView::LogSubscriber.attach_to :action_view
# Sapience::Extensions::ActiveJob::LogSubscriber.attach_to :active_job
Sapience::Extensions::ActionController::Notifications.use if Sapience.config.rails_ac_metrics
Sapience::Extensions::ActiveJob::Notifications.use if defined?(ActiveJob)
end
end
end
end