Module: Narou::Backtracer
- Defined in:
- lib/backtracer.rb
Constant Summary collapse
- LOG_NAME =
"trace_dump.txt"
Class Method Summary collapse
- .argv ⇒ Object
- .argv=(argv) ⇒ Object
- .build_command ⇒ Object
- .build_traces(exception) ⇒ Object
- .capture(&block) ⇒ Object
- .log_path ⇒ Object
- .save_log(traces) ⇒ Object
Class Method Details
.argv ⇒ Object
40 41 42 |
# File 'lib/backtracer.rb', line 40 def argv @argv || ARGV end |
.argv=(argv) ⇒ Object
36 37 38 |
# File 'lib/backtracer.rb', line 36 def argv=(argv) @argv = argv.map(&:dup) end |
.build_command ⇒ Object
63 64 65 |
# File 'lib/backtracer.rb', line 63 def build_command "#{$0} #{argv.join(' ')}" end |
.build_traces(exception) ⇒ Object
52 53 54 55 56 57 58 59 60 61 |
# File 'lib/backtracer.rb', line 52 def build_traces(exception) backtrace = exception.backtrace head = "#{backtrace.shift}: #{exception..encode(Encoding::UTF_8)} (#{exception.class})" buffer = StringIO.new buffer.puts head backtrace.each do |b| buffer.puts " from #{b}" end buffer.string end |
.capture(&block) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/backtracer.rb', line 13 def capture(&block) raise "need a block" unless block rescue_level = $debug ? Exception : StandardError yield rescue SystemExit => e exit e.status rescue SyntaxError => e warn e exit Narou::EXIT_ERROR_CODE rescue rescue_level => e traces = build_traces(e) if $display_backtrace warn traces else warn traces.lines[0..2] warn "" warn " エラーが発生したため終了しました。" warn " 詳細なエラーログは narou trace で表示出来ます。もしくは --backtrace オプションを付けて再度実行して下さい。" end save_log(traces) exit Narou::EXIT_ERROR_CODE end |
.log_path ⇒ Object
44 45 46 47 48 49 50 |
# File 'lib/backtracer.rb', line 44 def log_path if Narou.root_dir File.join(Narou.root_dir, LOG_NAME) else LOG_NAME end end |
.save_log(traces) ⇒ Object
67 68 69 70 71 72 73 74 |
# File 'lib/backtracer.rb', line 67 def save_log(traces) File.open(log_path, "w:UTF-8") do |fp| fp.puts "--- #{Time.now.strftime("%Y/%m/%d %H:%M:%S")} ---" fp.puts build_command fp.puts fp.puts traces end end |