1

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

是否可以使用tail -f某些选项或perl脚本来监视对该文件的写入并在它们前面加上时间戳?

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

4

4 回答 4

2

你可以使用一个while循环:

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

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

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

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

tail -f logfile | perl script.pl
于 2010-10-20T09:46:39.107 回答
2

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

C:\test>tail -F file  | gawk.exe "{s=systime(); print strftime(\"%Y-%m-%d:%H:%M:%S\",s),$0}"
于 2010-10-20T09:53:38.247 回答
1

可能您可以使用带有 File::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(),"] $_";
}
于 2010-10-20T09:57:49.080 回答
0

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

可能值得一看。

于 2010-10-20T09:58:29.157 回答