简体   繁体   中英

Ruby Monkey Patched Logger does not work in Rails Console

I have some helper methods on my ActiveSupport::BufferedLogger such as displaying KeyValue pairs, it all works fine from rails s but fails in rails c

In rails s, I can see that my Logger extends BufferedLogger and that is the class I have chosen to MonkeyPatch, I have also tested this out with ActiveSupport::Logger as well.

I had thought that rails c ran through the same initializers that rails s used, am I wrong in thinking that?

Do I need to run some sort of initializer when starting rails c?

Location of my file is:

  • config/initializers/active_support_logger.rb

Error is here:

在此处输入图片说明

Sample Snippet listed here

class ActiveSupport::BufferedLogger

    def kv(key, value)
        info('%-50s %s' % ["#{key}: ".brown, value])
    end

    def line
        info(@@l.brown)
    end

    def block(message)
        line
        info(message)
        line
    end

end

I recommend subclassing ActiveSupport::Logger (or ActiveSupport::BufferedLogger if you really want though it's deprecated in Rails 4) instead of monkey-patching. Rails provides a configuration option to override the logger instance used by the app. This works in any context that loads the Rails environment, including the server and console.

There are a number of ways you can do this; a quick and dirty way to get you started is to just define the class and set the logger instance in an initializer that will get loaded during the initialization process of the Rails environment:

# config/initializers/my_logger.rb

class MyLogger < ::ActiveSupport::Logger 
  # additional methods and overrides
end

Rails.logger = MyLogger.new(Rails.root.join("log", "#{Rails.env}.log"))

For more info, check out the Rails guide to debugging applications: http://guides.rubyonrails.org/debugging_rails_applications.html#the-logger

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM