代码之家  ›  专栏  ›  技术社区  ›  Benoit

如何使用Perl监控日志文件并插入时间戳?

  •  1
  • Benoit  · 技术社区  · 14 年前

    我有一个应用程序以附加模式生成日志,但是日志没有时间戳。

    可以用吗 tail -f 有选择,或 perl 监视对此文件的写入并为其加上时间戳前缀的脚本?

    考虑到我运行的是没有cygwin的Windows,我可以避免使用bash或任何其他unix shell吗?

    4 回复  |  直到 14 年前
        1
  •  2
  •   ghostdog74    14 年前

    如果您使用GNU尾,那么您应该能够使用GNU gawk .

    C:\test>tail -F file  | gawk.exe "{s=systime(); print strftime(\"%Y-%m-%d:%H:%M:%S\",s),$0}"
    
        2
  •  2
  •   martin clayton egrunin    14 年前

    您可以使用while循环:

    tail -f logfile | while read line;
    do
        echo $(date) $line;
    done
    

    表示每行的运行日期。可以使用日期命令的格式输出选项来获取所需的时间戳格式。

    我非常基本的Perl等价物是(script.pl):

    while (<>) {
        my $date = scalar localtime;
        print $date . " " . $_;
    }
    
    tail -f logfile | perl script.pl
    
        3
  •  1
  •   OMG_peanuts    14 年前

    也许您可以将Perl脚本与文件::tail和datetime一起使用吗?

    use File::Tail;
    use DateTime;
    my $ref=tie *FH,"File::Tail",(name=>$ARGV[0]);
    while (<FH>) {
        my $dt = DateTime->now();
        print "[", $dt->dmy(), " ",$dt->hms(),"] $_";
    }
    
        4
  •  0
  •   Zaid    14 年前

    看起来像 File::Tail 模块专门为读取附加的日志文件而设计。

    也许值得一看。

    推荐文章