Log4perl: новое сообщение в той же строке без префикса
Каждое сообщение 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");
Спасибо за ответ!
2 ответа
Решение
Если вам нужен индикатор выполнения, в cpan есть Term::ProgressBar
Попробуйте использовать две разные категории, которые обе записывают логи в одно и то же место - на экран. Изменить их 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