После выхода новой версии ProcessMonitor обнаружил, что теперь формат логов изменился. Вариантов выгрузки стало три XML,CSV и нативный формат тула. Решил CSV запарсировать.
у тула два параметра
1) лог в формате csv
2) директория куда пойдет output
тул удобен когда важно понять не только откуда читается, но и что
require "fileutils"
def processLog(file_name, len_offset)
len_offset_params = len_offset.split /,/
len = (len_offset_params[1].split /:/)[1].gsub(/\u00A0/, "").gsub(/\s+/, "").gsub(/"/, "")
offset = (len_offset_params[0].split /:/)[1].gsub(/\u00A0/, "").gsub(/\s+/, "").gsub(/"/, "")
begin
buffer = nil
File.open file_name, 'rb' do |file|
file.seek offset.to_i, IO::SEEK_SET
buffer = file.read len.to_i
$map_file.write("#{$log_file_num} #{file_name} #{offset} #{len}\n")
end
File.open $log_file_num.to_s, 'wb' do |file|
file.write buffer
end
rescue Exception => e
p e.class
end
end
p "call me ruby Logfile.CSV output_dir" and exit if ARGV.length != 2
lines = nil
File.open ARGV[0], 'r:bom|utf-8' do |file|
lines = file.readlines
end
lines.delete_at 0 # lets remove the first line
output_directory = ARGV[1]
FileUtils.mkdir(output_directory) if !File.directory?(output_directory)
Dir.chdir output_directory
$map_file = File.open "map.txt", 'w'
$map_file.write "\xEF\xBB\xBF"
$log_file_num = 0
lines.each {|line|
params = line.split '","'
next if !params[3].eql?('ReadFile')
processLog params[4], params[6]
$log_file_num+=1
}
$map_file.close