如何使用perl为应用程序输出添加时间戳

时间:2012-07-06 15:52:37

标签: perl time io piping

我有一个命令行应用程序,它在运行时提供命令行输出。当我将其写入文件(例如:app>> log.txt)时,它会显示在文本文件中,就像它出现在终端中一样。我需要能够为输出加时间戳,这样如果我让它继续运行,我可以回来查看它何时打印。

我尝试过使用perl脚本:

#!/usr/bin/env perl
use strict;
use warnings;
while (<STDIN>) {
  print time.": $. : $_";
}

使用此命令:

./app | perl timestamp.pl >> test.log 2>&1

但是日志是空的。对不起,我对我正在运行的应用程序没有更具体的了解。

2 个答案:

答案 0 :(得分:4)

遭受缓冲? Set

$| = 1;

位于脚本的顶部。

答案 1 :(得分:0)

很可能,@mob's answer solved your immediate problem。不过,我建议您在easy模式下使用Log::Log4perl。它可以帮助您避免多次重新发明轮子,并且您可以免费轻松配置日志级别:

#!/usr/bin/env perl

use strict; use warnings;

use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init($WARN);

while (<>) {
    INFO "$. : $_";
    if ( /easy/ and ($. > 1)) {
        ERROR "$ARGV [$.] - Make easy things harder!";
    }
    if (eof) {
        ALWAYS "Done with $ARGV";
    }
}
C:\temp> log.pl log.pl
2012/07/07 20:41:57 log.pl [5] - Make easy things harder!
2012/07/07 20:41:57 log.pl [6] - Make easy things harder!
2012/07/07 20:41:57 log.pl [10] - Make easy things harder!
2012/07/07 20:41:57 log.pl [11] - Make easy things harder!
2012/07/07 20:41:57 Done with log.pl

另请注意:

  

虽然这已被证明可以很好地熟悉Log :: Logperl的人们,但有效地避免用过多的不同旋钮(类别,追加器,关卡,布局)来破坏他们的头部,整体任务Log :: Log4perl的目的是让人们从一开始就使用类别来习惯这个概念。所以,让我们将这个隐藏在手册页中(恭喜阅读这篇文章:)。