0

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

何か案は?

更新:

プログラムの進行状況バーを作成しようとしました。しかし、結果として、このプログレス バーはログではなく、画面上でのみ必要になります。

このようにして私はそうしました:

$log->info("start");
printf("progress: ");
printf("10");
printf("20");
printf("30");

回答ありがとうございます。

4

2 に答える 2

3

ログを同じ場所 (画面) に書き込む 2 つの異なるカテゴリを使用してみてください。日付またはメッセージのみを追加する場合は、それらを変更して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
于 2012-07-06T10:26:14.493 に答える
3

プログレスバーが必要な場合は、 cpan にTerm::ProgressBarがあります

于 2012-07-06T13:57:12.407 に答える