在Rails中可见的方法

时间:2011-06-03 13:33:59

标签: ruby-on-rails model-view-controller logging

如何使这个方法在日志文件中输出黄线,可以从我的Rails应用程序中的任何地方(模型,控制器,视图)访问?

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

4 个答案:

答案 0 :(得分:8)

您可以在Kernel(不推荐)中定义它:

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

...如果真的希望它可以在任何地方使用。

或者,在lib/util.rb

中放置这样的内容
module Util
  def self.my_log(..)
    ..
  end
end

...并确保require 'util'中的config/application.rb,然后您可以在任何地方拨打电话:

Util.my_log(..)

答案 1 :(得分:7)

为什么不创建初始化程序并将此方法写入rails模块?

# 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

然后,您可以在代码中拨打Rails.log_with_colour("hello")Rails.log_with_colour("Hello again", :info)

答案 2 :(得分:3)

我在config/initializers/app_methods.rb中放了这样的东西。它们不需要在类或模块中作用域。感觉有点hacky但我从来没有遇到任何问题。

答案 3 :(得分:2)

将其添加为Object

中的实例和类方法
class Object
  def self.my_log(...)
    ...
  end

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