我想要输出格式如下:
/some/path/to/the/source/file(999):要记录的消息

最佳答案

此解决方案依赖于内部记录器调用链结构。所以最好是由伐木者自己支撑,这样它就不会那么脆弱了。

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

07-28 07:51