Perl:用于读取日志语句的正则表达式

时间:2013-07-10 08:53:38

标签: regex 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 个答案:

答案 0 :(得分: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}