在Ruby中,可以将文件和行号放入Logger.formatter吗?

pet*_*erk 3 ruby logging

我想要一个输出格式,如:

/ some/path/to/the/source/file(999):要记录的消息

pet*_*erk 5

此解决方案取决于内部Logger调用链结构.因此,由Logger本身支持这将是很好的,因此它将不那么脆弱.

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
Run Code Online (Sandbox Code Playgroud)