С помощью этого кода я преобразую журналы из 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.