Perl-如何提取logrotate的文件信息

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

我有下面的应用程序日志文件列表(已旋转),我只会生成新行。为了执行此操作,我想提取文件名索引节点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
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...