Ruby Monkey Patched Logger在Rails控制台中不起作用

时间:2014-11-26 04:13:11

标签: ruby-on-rails ruby

我的ActiveSupport :: BufferedLogger上有一些辅助方法,比如显示KeyValue对,它在 rails s 下工作正常但在 rails c

中失败

在rails s中,我可以看到我的Logger扩展了BufferedLogger,这是我选择使用MonkeyPatch的类,我也用ActiveSupport :: Logger测试了它。

我原以为rails c运行的是与rails使用的相同的初始化程序,我认为错了吗?

启动rails c时,是否需要运行某种初始化程序?

我的文件位置是:

  • 配置/初始化/ active_support_logger.rb

错误在这里:

enter image description 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

1 个答案:

答案 0 :(得分:0)

我建议继承ActiveSupport::Logger(或ActiveSupport::BufferedLogger,如果你真的想要它在Rails 4中被弃用),而不是猴子修补。 Rails提供了一个配置选项来覆盖应用程序使用的记录器实例。这适用于加载Rails环境的任何上下文,包括服务器和控制台。

有很多方法可以做到这一点;一个快速而肮脏的方法让你开始就是定义类并在初始化程序中设置logger实例,该初始化程序将在Rails环境的初始化过程中加载:

# 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"))

有关详细信息,请查看调试应用程序的Rails指南:http://guides.rubyonrails.org/debugging_rails_applications.html#the-logger