2011-04-13 00:09:07731 INFO [STDOUT] 04/13 0時09分07秒的信息...需要過濾日誌從最後5分鐘搜索線
喜大家。我會發布一些我的代碼,但我認爲它不值得發佈。我想要做的是我有一個像上面這樣的行的日誌文件。我需要做的是採取最後一行時間戳,並保留最後5分鐘的所有行(而不是最後200行或任何....這會更容易)。誰能幫忙?我已經在網上搜索了一些不錯的提示,但仍然沒有任何進展,並且感到沮喪。謝謝!
2011-04-13 00:09:07731 INFO [STDOUT] 04/13 0時09分07秒的信息...需要過濾日誌從最後5分鐘搜索線
喜大家。我會發布一些我的代碼,但我認爲它不值得發佈。我想要做的是我有一個像上面這樣的行的日誌文件。我需要做的是採取最後一行時間戳,並保留最後5分鐘的所有行(而不是最後200行或任何....這會更容易)。誰能幫忙?我已經在網上搜索了一些不錯的提示,但仍然沒有任何進展,並且感到沮喪。謝謝!
輸出下面是一個簡單的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);
}
爲什麼在將時間戳轉換爲數字的麻煩之後使用'ge'? – mob 2011-04-25 20:02:21
@mob:對不起,錯字。固定。 – 2011-04-25 20:09:54
程序的開始時間已經在['$^T'](http://perldoc.perl.org/perlvar.html#%24%5eT)中。 – 2011-04-25 20:51:47
使用regexp grab:00:09:07遍歷所有行,並根據當前時間(本地時間等)進行檢查。 如果該文件包含來自不同日期的條目,那麼也使用正則表達式搶日期,並利用locatime
我是否可以由你有興趣找出如何找到時間戳是上次在你的日誌,這是之前的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;
祝你好運!
如何修改腳本,使其與日誌下面的工作
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
這將需要自定義腳本。你的標籤意味着Perl,但它是否需要Perl? – 2011-04-25 19:23:00
是的,它應該在Perl中。 – toneman 2011-04-25 20:07:50