我有一个命令行应用程序,它在运行时提供命令行输出。当我将其写入文件(例如:app>> log.txt)时,它会显示在文本文件中,就像它出现在终端中一样。我需要能够为输出加时间戳,这样如果我让它继续运行,我可以回来查看它何时打印。
我尝试过使用perl脚本:
#!/usr/bin/env perl
use strict;
use warnings;
while (<STDIN>) {
print time.": $. : $_";
}
使用此命令:
./app | perl timestamp.pl >> test.log 2>&1
但是日志是空的。对不起,我对我正在运行的应用程序没有更具体的了解。
答案 0 :(得分:4)
答案 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的目的是让人们从一开始就使用类别来习惯这个概念。所以,让我们将这个隐藏在手册页中(恭喜阅读这篇文章:)。