开发者

Method visible everywhere in Rails

How can I make this method, which outputs a yellow line in the log file, accessible from everywhere (Models, Controllers, Views) in my Rails app?

def my_log(text, file = "", line = "")
  text.to_s.chomp.gsub!(/%/, "%%")
  Rails.logger.debug(sprintf("\033[32m#{file}#{lin开发者_JAVA技巧e}\033[0m\033[1m\033[33m#{text}\033[0m"))
end


You could define it in Kernel (NOT recommended):

module Kernel
  def my_log(..)
    ..
  end
end

... if you really want it available anywhere.

Or, place something like this in lib/util.rb:

module Util
  def self.my_log(..)
    ..
  end
end

... and make sure to require 'util' in your config/application.rb and then you can call this anywhere:

Util.my_log(..)


why not create an initializer and write this method to the rails module?

# config/initializers.rb
module Rails

  def self.log_with_colour(message, level = :debug)
    text.to_s.chomp.gsub!(/%/, "%%")
    logger.send(level, sprintf("\033[32m#{__FILE__}#{__LINE__}\033[0m\033[1m\033[33m#{message}\033[0m"))
  end

end

in your code you can then call Rails.log_with_colour("hello") or Rails.log_with_colour("Hello again", :info)


I put stuff like this in config/initializers/app_methods.rb. They don't need to be scoped inside a class or module. Feels a bit hacky but i never had any problems.


Add it as an instance and class method in Object

class Object
  def self.my_log(...)
    ...
  end

  def my_log(...)
    Object.my_log(...)
  end
end
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜