perl - 使用 perl 将日志附加到文件
问题描述
使用此代码即时从 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。我怎么能这样做?
当我将此代码放在'end open(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.
解决方案
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);
推荐阅读
- c++ - 在 Linux 中使用 C/C++ 强制 tcp/ip 跟踪路由通过某个跃点
- javascript - 组件仅在两次单击后更新 React
- php - 如何获取所有内容
- c# - 如何使用 Sql 查询从数据行中获取完全匹配
- c++ - 将数组的值解包为可变参数函数的参数
- python - 使用 Python/Keras 训练长期短期记忆网络时出现 InvalidArgumentError(音频分类)
- ruby-on-rails - ActiveAdmin - 显示关联模型的属性
- php - 更改租户数据库后,Laravel Auth 外观不起作用
- javascript - Firebase 错误:提供给 sendToDevice() 的注册令牌必须是非空字符串或非空数组
- java - java在哪个地方内部运行异常