GCログの-XX:+PrintGCTimeStampsは起動時からの経過時間を行頭に付与する。最近のVMだと絶対時間を吐いてくれる-XX:+PrintGCDateStampsが使えるけど、前者しか付与されていない相対時間のGCログを解析する機会も結構ある。
というわけで相対時間を絶対時間に変換する。0.000に該当する基準となる時間を第一引数に渡す。
$ jruby gclog-converttime.rb '2012-01-02 03:04:05.006' gc.log
require 'time' base_datetime_s = ARGV.shift base_datetime = Time.parse(base_datetime_s) delta = base_datetime.to_f while gets do if /^(\d+)\.(\d{3}):/ =~ $_.chomp! then gc_msec = "#{$1}.#{$2}".to_f gc_datetime = gc_msec + delta t = Time.at(gc_datetime) actual_datetime = t.strftime("%Y-%m-%d %H:%M:%S.%L") # actual_datetime = t.strftime("%Y-%m-%dT%H:%M:%S.%L%z") # PrintGCDateStamps format puts "#{actual_datetime}: #{$_}" else puts $_ end end