2011-04-25 52 views
3

2011-04-13 00:09:07731 INFO [STDOUT] 04/13 0時09分07秒的信息...需要過濾日誌從最後5分鐘搜索線

喜大家。我會發布一些我的代碼,但我認爲它不值得發佈。我想要做的是我有一個像上面這樣的行的日誌文件。我需要做的是採取最後一行時間戳,並保留最後5分鐘的所有行(而不是最後200行或任何....這會更容易)。誰能幫忙?我已經在網上搜索了一些不錯的提示,但仍然沒有任何進展,並且感到沮喪。謝謝!

+0

這將需要自定義腳本。你的標籤意味着Perl,但它是否需要Perl? – 2011-04-25 19:23:00

+0

是的,它應該在Perl中。 – toneman 2011-04-25 20:07:50

回答

5

輸出下面是一個簡單的Perl腳本,再比較,超過的文件和打印的每一行,其時間戳在5分鐘內迭代在執行開始的時候。爲了獲得更高的效率,並假設這些行按照時間戳順序排列,可以修改此設置,以便在遇到第一個可打印行時設置布爾標誌,並從該點開始跳過測試。

#!/usr/bin/perl 
use POSIX qw(mktime); 

$now = time(); 
while(<>) 
{ 
    ($yy,$mm,$dd,$h,$m,$s,$t) = /^(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+),(\d+)/; 
    $t = mktime($s+$t/1000, $m, $h, $dd, $mm-1, $yy-1900); 
    print "$_" if ($t >= $now-300); 
} 
+0

爲什麼在將時間戳轉換爲數字的麻煩之後使用'ge'? – mob 2011-04-25 20:02:21

+0

@mob:對不起,錯字。固定。 – 2011-04-25 20:09:54

+1

程序的開始時間已經在['$^T'](http://perldoc.perl.org/perlvar.html#%24%5eT)中。 – 2011-04-25 20:51:47

1

使用regexp grab:00:09:07遍歷所有行,並根據當前時間(本地時間等)進行檢查。 如果該文件包含來自不同日期的條目,那麼也使用正則表達式搶日期,並利用locatime

2

我是否可以由你有興趣找出如何找到時間戳是上次在你的日誌,這是之前的5分鐘項的最新評論。

我認爲吉姆·加里森的解決方案,可以修補,以取代本:

$now = time(); 

與此:

open F, "<server.log" or die $!; 
seek F,-1000,2; # set pos to last 1000 bytes 
my @f = <F>; 
$_ = $f[$#f]; 
($yy,$mm,$dd,$h,$m,$s,$t) = /^(\d+)-(\d+)-(\d+)\s+(\d+):(\d+):(\d+),(\d+)/; 
$now = mktime($s+$t/1000, $m, $h, $dd, $mm-1, $yy-1900); 

$now現在應該包含在日誌中最後的時間戳。

我將「-1000」近似爲足以經過日誌中至少一行的時間。如果你期望在日誌中有很長的一行,你可以將它設置得更高,但是從我所看到的情況來看,最後一個日誌條目「應該」相當短。

如果你有一個巨大的日誌文件,並希望增加在下面的搜索性能,您可以使用估計和執行設法找到該文件與過去的,比方說,百萬字節:

seek F, -1000000, 2; 

祝你好運!

+0

這是我拼圖的最後一塊,所以很快就會給它一個旋轉。謝謝! – toneman 2011-04-29 19:22:58

+0

男人,你們是sheeeeeeeeeeit! – toneman 2011-04-29 21:01:07

+0

日誌解析是簡單的模式;-) – TLP 2011-04-30 05:53:28

0

如何修改腳本,使其與日誌下面的工作

Dec 18 09:41:18 sd 
Dec 18 09:46:29 sds 
Dec 18 09:48:39 sds 
Dec 18 09:48:54 sds 
Dec 18 09:54:47 sds 
Dec 18 09:55:33 sds 
Dec 18 09:55:38 sds 
Dec 18 09:57:58 sds 
Dec 18 09:58:10 sds 
Dec 18 10:00:50 sdsd 
Dec 18 10:03:43 sds 
Dec 18 10:03:50 sdsd 
Dec 18 10:04:06 sdsd 
Dec 18 10:04:15 sdsd 
Dec 18 10:14:50 wdad 
Dec 18 10:19:16 sdadsa 
Dec 18 10:19:23 dsds 
Dec 18 10:21:03 sadsd 
Dec 18 10:22:54 adas 
Dec 18 10:27:32 qadad