每封Log4perl条消息都以新行开头:
my $log = Log::Log4perl->get_logger("log");
$log->info("start:");
$log->info("10");
$log->info("20");
$log->info("30");
结果:
[2012/07/06 13:12:27] INFO log - start:
[2012/07/06 13:12:27] INFO log - 10
[2012/07/06 13:12:27] INFO log - 20
[2012/07/06 13:12:27] INFO log - 30
如何在同一行上获取下一条消息并且没有前缀:
[2012/07/06 13:12:27] INFO log - start: 10 20 30
有什么想法吗?
UPD:
我试图为我的程序制作进度条。但结果我只在屏幕上而不是在日志中需要这个进度条。
通过这种方式,我这样做了:
$log->info("start");
printf("progress: ");
printf("10");
printf("20");
printf("30");
感谢您的回答!
答案 0 :(得分:3)
尝试使用两种不同的类别,即将日志写入同一位置,即屏幕。修改他们的PatternLayout
并在您想要添加日期或仅添加消息时使用其中一个。您还应该添加新行明确:
script.pl
的内容:
use warnings;
use strict;
use Log::Log4perl;
my $conf = qq|
log4perl.category.Stdout_nl=INFO, Date
log4perl.appender.Date=Log::Log4perl::Appender::Screen
log4perl.appender.Date.layout=PatternLayout
log4perl.appender.Date.layout.ConversionPattern=%d %p %m
log4perl.category.Stdout=INFO, Number
log4perl.appender.Number=Log::Log4perl::Appender::Screen
log4perl.appender.Number.layout=PatternLayout
log4perl.appender.Number.layout.ConversionPattern= %-3m
|;
Log::Log4perl::init( \$conf );
my $log_date = Log::Log4perl->get_logger( "Stdout_nl" );
my $log_num = Log::Log4perl->get_logger( "Stdout" );
$log_date->info("start:");
$log_num->info("10");
$log_num->info("20");
$log_num->info("30\n");
像以下一样运行:
perl script.pl
使用以下输出:
2012/07/06 12:24:04 INFO start:10 20 30
答案 1 :(得分:3)
如果您需要进度条,则cpan中有Term::ProgressBar