我有一个以附加模式生成日志的应用程序,但日志没有时间戳。
是否可以使用tail -f
某些选项或perl
脚本来监视对该文件的写入并在它们前面加上时间戳?
鉴于我在没有 Cygwin 的情况下运行 Windows,我可以避免使用 bash 或任何其他 Unix shell 吗?
你可以使用一个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
如果您使用的是 GNU tail,那么您应该可以使用 GNU gawk。
C:\test>tail -F file | gawk.exe "{s=systime(); print strftime(\"%Y-%m-%d:%H:%M:%S\",s),$0}"
可能您可以使用带有 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(),"] $_";
}
看起来该File::Tail
模块是专门为读取附加的日志文件而设计的。
可能值得一看。