我的ActiveSupport :: BufferedLogger上有一些辅助方法,比如显示KeyValue对,它在 rails s 下工作正常但在 rails c
中失败在rails s中,我可以看到我的Logger扩展了BufferedLogger,这是我选择使用MonkeyPatch的类,我也用ActiveSupport :: Logger测试了它。
我原以为rails c运行的是与rails使用的相同的初始化程序,我认为错了吗?
启动rails c时,是否需要运行某种初始化程序?
我的文件位置是:
错误在这里:
此处列出的示例代码段
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
答案 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