2011-12-16 50 views
2

我想寫一個ruby腳本,從一個配置文件中讀取文件名,然後當我運行這個腳本時,它將採用每個文件的尾部並輸出控制檯。紅寶石腳本在日誌文件上運行尾部?

要做到這一點,最好的方法是什麼?

+1

什麼平臺? 「tail」命令對於執行此操作非常方便,並且比自己打開和查找文件要快得多。 – tadman 2011-12-16 18:18:28

回答

2

您可以從您的Ruby腳本調用Linux的tail -number_of_lines file_name命令,讓它打印控制檯或捕獲輸出,並自己打印出來(如果你需要在打印前做這些方針的東西)

1

我們有一個包含日誌文件列表的配置文件;例如,像這樣:

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

配置文件的格式是一個yaml simple sequence,因此假設我們命名這個文件「settings.yaml」

紅寶石腳本採取每個文件的尾和控制檯輸出可能是這樣的:

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 [Version 6.1.7601]上用ruby 1.9.3p125(2012-02-16)[i386-mingw32]測試了這個解決方案。 – 2012-11-16 18:06:13