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

时间:2010-10-20 09:41:46

标签: perl tail gnuwin32

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

是否可以将tail -f与某个选项或perl脚本一起使用来监控对此文件的写入并在其前面加上时间戳?

鉴于我在没有Cygwin的情况下运行Windows,我可以避免使用bash或任何其他Unix shell吗?

4 个答案:

答案 0 :(得分:2)

您可以使用while循环:

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

虽然意味着每条线的运行日期。您可以使用date命令的format输出选项来获取所需的时间戳格式。

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

while (<>) {
    my $date = scalar localtime;
    print $date . " " . $_;
}

tail -f logfile | perl script.pl

答案 1 :(得分:2)

如果你使用的是GNU tail,那么你应该可以使用GNU gawk

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

答案 2 :(得分:1)

可能你可以使用带文件:: Tail和DateTime的perl脚本吗?

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(),"] $_";
}

答案 3 :(得分:0)

看起来File::Tail模块专门用于读取附加的日志文件。

值得一看。