2013-07-10 59 views
-2

我日誌進來的方式如下:的Perl:正則表達式,用於讀取日誌語句

2013-07-10 17:27:08 +0900 app.log.error.traffic: {"app.log_count":10,"app.log_bytes":9960,"app.log_count_rate":0.5,"app.log_bytes_rate":166.0} 

的「app.log.error.traffic」部分將不會改變,但日期和其他數字改變所有的時間。換句話說,「2013-07-10」每天都在變化,「08 + 0900」也可以改變,「app.log.error.traffic:」不會,「」app.log_count「」也不會改變。

我想創建一個perl腳本,如果「app.log_count」旁邊的數字超出閾值級別,則會引發警告。

我作了如下:

#!/usr/bin/env perl   
use strict; 
use warnings; 
use utf8; 

my $file_location = "/var/log/app.log" ; 
my $threshold = 3;   

open my $infile, "<", $file_location or die("$!: $file_location"); 
    while (<$infile>) { 
     if (/ REGEX /) { 
      if ($_ >= $threshold) { 
      # warning 
      } else { 
      # not warning; 
      } 
     } 
    }  

close $infile; 

但正如你看到的,最重要的部分缺失。我會在REGEX中放什麼?

+1

'我的$ file_location =; my $ threshold =; '是錯的 – 2013-07-10 09:01:58

+0

在正則表達式中找到一個教程,一個基本的教程應該能教你如何使用正則表達式,如果它失敗了,更新你的問題。 – Jerry

+0

@Paulchenkiller我添加了一個例子 – ado

回答

2

,你可以這樣做

use strict; 
use warnings; 

while(<DATA>){ 
    my ($value) = $_=~ /"app.log_count":(\d+)/; 
    print"$value\n"; # will give you 10 
} 

__DATA__ 
013-07-10 17:27:08 +0900 app.log.error.traffic: {"app.log_count":10,"app.log_bytes":9960,"app.log_count_rate":0.5,"app.log_bytes_rate":166.0} 
+0

感謝這個「app.log_count」:(\ d +)正則表達式似乎匹配 – ado

+0

不需要'$ _ =〜','app.log'應該是'app \ .log ',但我只是挑剔。 – doubleDown