Perl-如何提取logrotate的文件信息
我有下面的应用程序日志文件列表(已旋转),我只会生成新行。为了执行此操作,我想提取文件名、索引节点和n。每个文件的行数,以便将其写入临时文件,每次在细化之前我都会阅读这些文件(如果您愿意,我愿意接受更好的解决方案) 这是我的文件列表:Perl-如何提取logrotate的文件信息,perl,rotation,Perl,Rotation,我有下面的应用程序日志文件列表(已旋转),我只会生成新行。为了执行此操作,我想提取文件名、索引节点和n。每个文件的行数,以便将其写入临时文件,每次在细化之前我都会阅读这些文件(如果您愿意,我愿意接受更好的解决方案) 这是我的文件列表: root> ls -l applog_s0.0.log applog_s0.1.log applog_s0.2.log applog_s0.3.log applog_s1.0.log applog_s1.1.log applog_s1.2.log applo
root> ls -l
applog_s0.0.log
applog_s0.1.log
applog_s0.2.log
applog_s0.3.log
applog_s1.0.log
applog_s1.1.log
applog_s1.2.log
applog_s1.3.log
applog_s2.0.log
applog_s2.1.log
applog_s2.2.log
applog_s2.3.log
applog_s3.0.log
applog_s3.1.log
applog_s3.2.log
applog_s3.3.log
我不能按数字顺序读取最后一个日志文件,因为它可能最近关闭了,我有丢失数据的风险
这是我的脚本草稿(草稿,因为某些指令返回编译错误):
您能帮我澄清一下吗?
$。
是上次访问的文件句柄中的当前行号。把($filename)
放在后面没有任何意义。@choroba我不明白为什么perl-ne'}{print$。'applog_s1.0.log有效…@AllanSimeoe尝试查看此帖子,它可以帮助您:@clarkseth是的,我看过此帖子,它对我的线程非常有用,但我必须在脚本中做一件不同的事情。也许可以尝试将问题分解为更小的步骤,并尝试分别询问每个步骤:如何获取文件的行数o获取文件的索引节点号?等(请注意,在标量上下文中不返回索引节点号)。
my $MY_DIR="/usr/cataclust/sharedfolder/logs/";
my %filelist;
# Load file list
foreach my $filename (glob("$MY_DIR/applog_s*.log")) {
my $ino = stat($filename); # Get inode of my file
my $nrows = $. ($filename); # this row doesn't work into script :( it works only by cmd line as perl -ne '}{ print $.' applog_s1.0.log
push( @{ $filelist { filename } }, $filename);
push( @{ $filelist { inode } }, $ino);
push( @{ $filelist { rows } }, $nrows);
}
# Elaborate log
foreach my $filename (glob("$IN_DIR/applog_s*.log")) {
open (FILE, $filename) or die "can't read open $filename";
$/ = "\n\n";
while( <FILE> ) {
my @rows = split /\n\n/;
my $ino = stat($filename);
if( $filename == $filelist{name} && $ino == $filelist{inode} ) {
if( $. < $filelist{rows} ) {
my $rown = $.;
if ($rows[$row] =~ m/\A\d.-\s(\d{8})\s(\d{2}:\d{2}:\d{2})\s-\s(\w+)\s-\s\/Extended Info/) {
if ($rows[$rown] =~ m/WARNING/ || $rows[$rown] =~ m/CRITICAL/ && $rows[$rown] !~ m/INFORMATION/) { # Shows only errors
my ($date, $time, $class, $message ) = $rows[$rown] =~ m/\A\d.-\s(\d{8})\s(\d{2}:\d{2}:\d{2})\s-\s(\w+)\s-\s\/Extended Info\n(\w.*)/;
push @evt, {date => $date, time => $time, classification => $class, information => $message};
}
}
}
}
}
}
0#- 20180403 11:11:11 - ERROR - /Extended Info
Fs Doesn't work...
1#- 20180403 11:12:13 - ERROR - /Extended Info
Fs Doesn't work...