Добавить журналы в файл с perl - PullRequest
0 голосов
/ 03 апреля 2020

С помощью этого кода я преобразую журналы из filelogmsg2.txt:

use strict;
use warnings;
use feature 'say';
use JSON;
use utf8;


my $filename = '/tmp/logmsg2.txt';

open(FH, '<', $filename) or die $!;
while(<FH>){


   my %IDs = ( "User awx01 logged in." => 1001 );
   my %levels = ( INFO => 4 );

   # read in all the data, even though it looks
   my $data = do { local $/; $_ };
   my $decoded = decode_json( $data );
   $decoded->{Message} = decode_json( $decoded->{Message} );

   say rec2msg($decoded);

   sub rec2msg {
       my $r = shift;
       $r->{Message}{message} =~ /(\w+) (\w+) (.+)/;

       my($user,$msg) = ($2,"$1 $3");
       my $ID    = $IDs{$r->{Message}{message}};
       my $level = $levels{$r->{Message}{level}};

       my $out = "$r->{Message}{'@timestamp'} host CEF:0|OpenSource|AWX|7.0.0|$ID|$msg|$level|src=127.0.0.1 dst=$r->{MessageSourceAddress} duser=$user"
   }
}

close(FH);

Но после того, как я это сделаю, я хочу, чтобы преобразованные журналы были перемещены в этот файл: /tmp/logmsg3.txt. Как я могу это сделать?

Когда я помещаю этот код в «конец открытого (my $ out,>>, $ filename2)»:

my $out = "$r->{Message}{'@timestamp'} host CEF:0|OpenSource|AWX|7.0.0|$ID|$msg|$level|src=127.0.0.1 dst=$r->{MessageSourceAddress} duser=$user"
open(my $out, '>', $filename2)
   }
}

Я получаю эту ошибку:

Can't find string terminator '"' anywhere before EOF at /usr/transforming.pl line 33.

1 Ответ

0 голосов
/ 03 апреля 2020
my %IDs = ( "User awx01 logged in." => 1001 );
my %levels = ( INFO => 4 );

my $filename = '/tmp/logmsg2.txt';
my $filename2 = '/tmp/logmsg3.txt';

open(OUT, '>', $filename2) or die $!;
open(FH, '<', $filename) or die $!;
while(<FH>){


   # read in all the data, even though it looks
   my $data = do { local $/; $_ };
   my $decoded = decode_json( $data );
   $decoded->{Message} = decode_json( $decoded->{Message} );

   say rec2msg($decoded);

   sub rec2msg {
       my $r = shift;
       $r->{Message}{message} =~ /(\w+) (\w+) (.+)/;

       my($user,$msg) = ($2,"$1 $3");
       my $ID    = $IDs{$r->{Message}{message}};
       my $level = $levels{$r->{Message}{level}};

       my $out = "$r->{Message}{'@timestamp'} host CEF:0|OpenSource|AWX|7.0.0|$ID|$msg|$level|src=127.0.0.1 dst=$r->{MessageSourceAddress} duser=$user";
       print OUT $out;
       print OUT "\n";
       return $out;
   }
}

close(FH);
close(OUT);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...