在Rails中可见的方法

Luc*_*mug 4 model-view-controller logging ruby-on-rails

我如何使这个方法在日志文件中输出一条黄线,可以从我的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
Run Code Online (Sandbox Code Playgroud)

Jit*_*its 9

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

module Kernel
  def my_log(..)
    ..
  end
end
Run Code Online (Sandbox Code Playgroud)

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

或者,将这样的东西放在lib/util.rb:

module Util
  def self.my_log(..)
    ..
  end
end
Run Code Online (Sandbox Code Playgroud)

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

Util.my_log(..)
Run Code Online (Sandbox Code Playgroud)

  • 好吧,这可能就是为什么它不起作用.尝试将其添加到`config/initializers`下的新文件中. (2认同)

bod*_*ous 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
Run Code Online (Sandbox Code Playgroud)

在您的代码中,您可以调用Rails.log_with_colour("hello")Rails.log_with_colour("Hello again", :info)