Class: MongoRequestLogger::Railtie

Inherits:
Rails::Railtie
  • Object
show all
Defined in:
lib/mongo_request_logger/railtie.rb

Class Method Summary collapse

Class Method Details

.setup(app) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/mongo_request_logger/railtie.rb', line 9

def setup(app)
  Mongo::Logger.logger.level = Logger::INFO # Because spammy.
  logger = MongoRequestLogger.configure(fallback_log: Rails.root.join("log/#{Rails.env}.log"))

  app.config.logger = logger

  Rails.logger = logger

  if defined? ActiveRecord
    ActiveRecord::Base.logger = logger
  end

  if defined? ActionController
    ActionController::Base.logger = logger
  end


  app.config.middleware.insert_after ActionDispatch::DebugExceptions, MongoRequestLogger::Rack

  unless logger.adapter.is_a?(MongoRequestLogger::Adapters::Mongo)
    app.config.after_initialize do
      # Unicorn clears the START_CTX when a worker is forked, so if we have
      # data in START_CTX then we know we're being preloaded. Unicorn does
      # not provide application-level hooks for executing code after the
      # process has forked, so we reconnect lazily.
      if defined?(Unicorn) && !Unicorn::HttpServer::START_CTX.empty?
        ::MongoRequestLogger.session.disconnect
      end

      # Passenger provides the :starting_worker_process event for executing
      # code after it has forked, so we use that and reconnect immediately.
      if ::Mongoid::Config.running_with_passenger?
        PhusionPassenger.on_event(:starting_worker_process) do |forked|
          ::MongoRequestLogger.session.disconnect if forked
        end
      end
    end
  end

end