LoginSignup
0
0

More than 5 years have passed since last update.

Railsで特定のURLのときだけログファイルを分ける

Posted at

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0