Ruby on rails 方法在Rails中随处可见

Ruby on rails 方法在Rails中随处可见,ruby-on-rails,model-view-controller,logging,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 将其添加为对象中的实例和类方法 class Obje

我如何使这个在日志文件中输出一条黄线的方法在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

将其添加为对象中的实例和类方法

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

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

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

。。。如果你真的想在任何地方都能买到

或者,在
lib/util.rb
中放置类似的内容:

module Util
  def self.my_log(..)
    ..
  end
end
。。。并确保在
config/application.rb
中需要'util'
,然后您可以在任何地方调用它:

Util.my_log(..)

为什么不创建一个初始值设定项并将此方法写入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\u with_color(“hello”)
Rails.log\u with_color(“hello reach”,:info)
我把类似的东西放在
config/initializers/app\u methods.rb
中。它们不需要限定在类或模块内。感觉有点不舒服,但我从来没有遇到过任何问题。

我遇到了错误:
application.rb:3:in'require':没有这样的文件要加载--util(LoadError)
。我也尝试了
要求使用'lib/util'
,但是运气不好。@Luke-I)您使用的是Rails 2还是Rails 3;ii)util.rb文件的确切位置;iii)您将行
require'util'
放在何处?i)Rails 3;ii)在我的应用程序/库下;iii)在文件的顶部,在iii的“require'rails/all”之后),确切地说是在哪个文件的顶部?好的,这可能就是它不起作用的原因。尝试将其添加到
config/initializers
下的新文件中。如果您在整个应用程序中使用它,这是一种更好的方法(初始化程序会自动加载,因此无需任何要求)。听起来不错。
Rails
模块是必需的吗?像
模块记录器[…]end
这样的东西不起作用?那会起作用。不过,您必须将该模块包含在希望使用记录器方法的每个地方。另外,已经有一个名为Logger的类,因此会出现名称冲突
# 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