versions
- rails (5.2.1)
- request_store (1.4.1)
code
gem 'request_store'
config/initializers/foo_logger.rb
class FooLogger < ActiveSupport::Logger
PATH = "#{Rails.root}/log/#{Rails.env}_foo.log"
# LEVEL = Logger::UNKNOWN
# LEVEL = Logger::FATAL
# LEVEL = Logger::ERROR
# LEVEL = Logger::WARN
LEVEL = Logger::INFO
# LEVEL = Logger::DEBUG
def self.logger
@logger ||= \
new(PATH).tap do |l|
l.level = LEVEL
l.formatter = Rails.logger.formatter
end
end
def self.activate
RequestStore.store[:FooLogger_active] = true
end
def active?
!!RequestStore.store[:FooLogger_active]
end
def add(severity, message = nil, progname = nil, &block)
return true unless active?
super
end
end
Rails.logger.extend ActiveSupport::Logger.broadcast(FooLogger.logger)
config/initializers/foo_loggable.rb
module FooLoggable
def call(env)
if env['PATH_INFO'] =~ Regexp.new('/foo')
HostLogger.activate
end
super
end
end
Rails::Rack::Logger.prepend FooLoggable