2011-12-16 15 views
2

私は、ファイル名を持つ設定ファイルから読み込んだルビースクリプトを書きたいと思っています。スクリプトを実行すると、各ファイルの末尾にコンソールが出力されます。ログファイルにtailを実行するrubyスクリプト?

これを行う最善の方法は何ですか? (あなたがそれを印刷する前に、これらの行に何かをする必要がある場合)

+1

どのプラットフォームですか? 'tail'コマンドはこれを行うのに非常に便利で、あなた自身がファイルを開いて探すよりもはるかに高速です。 – tadman

答えて

2

あなたは

4

をあなたのRubyスクリプトからLinuxのtail -number_of_lines file_nameコマンドを起動し、それがコンソールに印刷または出力をキャプチャし、それを自分で印刷させることができますを見てみましょうFile::Tail gem。

1

ログファイルの一覧を含む構成ファイルがあります。例えば、次のように:

--- 
- C:\fe\logs\front_end.log 
- C:\mt\logs\middle_tier.log 
- C:\be\logs\back_end.log 

設定ファイルのフォーマットは、したがって、我々は「settings.yaml」

各ファイルの末尾を取るRubyスクリプトを、このファイルの名前と仮定し、yaml simple sequenceです

require 'yaml' 
require 'file-tail' 

logs = YAML::load(File.open('settings.yaml')) 
threads = [] 

logs.each do |the_log| 
    threads << Thread.new(the_log) { |log_filename| 
    File.open(log_filename) do |log| 
     log.extend(File::Tail) 
     log.interval = 10 
     log.backward(10) 
     log.tail { |line| p "#{File.basename(the_log,".log")} - #{line}" } 
    end 
    } 
end 

threads.each { |the_thread| the_thread.join } 

注:私は...、それが元となるファイルの名前を前に付けたかった私にとって、これは良いオプションですが、あなたができる各ラインを表示し、出力コンソールには、このようなことができ編集あなたが好きなように変更するスクリプト。テールパラメータについても同じです。

ご使用の環境でfile-tailが見つからない場合は、リンク先の@Mark Thomasの回答に従ってください。つまり、次のようにする必要があります。

> gem install file-tail 
+0

@codecompleting:Microsoft Windows [バージョン6.1.7601]のruby 1.9.3p125(2012-02-16)[i386-mingw32]でこのソリューションを成功裏にテストしました。 –

関連する問題