次のような出力形式が必要です。
/some/path/to/the/source/file(999) : ログに記録されるメッセージ
このソリューションは、内部の 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
__FILE__ と __LINE__ は、現在実行中のファイルと行を保持する一種の動的定数です。
Rubyでclass_eval <<-"end_eval", __FILE__, __LINE__とはどういう意味ですか?