2013-04-06 31 views

回答

5

该解决方案依赖于内部记录器呼叫链结构。所以这将是很好的记录器本身,所以它不会变脆。

require 'logger' 

... 

module MyModule 

@@_logger_ = Logger.new(STDOUT); 

def self.log 
    @@_logger_ 
end 

def log 
    @@_logger_ 
end 

@@_logger_.formatter = proc do |severity, datetime, progname, msg| 
    fileLine = ""; 
    caller.each do |clr| 
     unless(/\/logger.rb:/ =~ clr) 
      fileLine = clr; 
      break; 
     end 
    end 
    fileLine = fileLine.split(':in `',2)[0]; 
    fileLine.sub!(/:(\d)/, '(\1'); 
    "#{fileLine}) : #{msg}\n" 
end 
0

__FILE__和__LINE__有几分持有当前正在执行的文件和行动态常数。

What does class_eval <<-"end_eval", __FILE__, __LINE__ mean in Ruby?

+1

注意上述问题/答案的目的是不知道在当前* *文件的文件和行,但报告,其中log.debug(消息)被称为地方的文件和行在代码中,定义了格式化和打印输出日志消息的方法的文件。 – peterk 2013-04-07 19:40:24

+1

那么你是否暗示,也许是某种“类”,它以某种方式传递给一个方法的调用,可以“评估”__LINE__和__FILE__以获得我上面得到的结果?像参数数组或其他一些奇怪的东西? – peterk 2013-04-07 19:49:27

相关问题