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

发布于 2024-09-28 03:01:03 字数 196 浏览 4 评论 0原文

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

是否可以将 tail -f 与某些选项一起使用,或使用 perl 脚本来监视对此文件的写入并为其添加时间戳前缀?

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

I have an application which generates logs in append mode, but the logs are not timestamped.

Is it possible to use tail -f with some option, or a perl script to monitor writes to this file and prefix them with a timestamp?

Given that I am running Windows without Cygwin, could I avoid using bash or any other Unix shell?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

风柔一江水 2024-10-05 03:01:03

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

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

if you are using GNU tail, then you should be able to use GNU gawk.

C:\test>tail -F file  | gawk.exe "{s=systime(); print strftime(\"%Y-%m-%d:%H:%M:%S\",s),$0}"
你不是我要的菜∠ 2024-10-05 03:01:03

您可以使用 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

You could use a while loop:

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

Implies running date for each line though. You could use the format output options of the date command to get the timestamp format you want.

I very basic Perl equivalent would be (script.pl):

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

tail -f logfile | perl script.pl
爺獨霸怡葒院 2024-10-05 03:01:03

也许您可以使用带有 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(),"] $_";
}

May be could you use a perl script with File::Tail and 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(),"] $_";
}
笑,眼淚并存 2024-10-05 03:01:03

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

也许值得一看。

It looks like the File::Tail module was designed specifically for reading in appended log files.

It may be worth a look.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文