2011-12-16 40 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