2

実行時にコマンドライン出力を提供するコマンドラインアプリがあります。ファイル (例: app >> log.txt) に書き込むと、ターミナルに表示されるのと同じように、すべてテキスト ファイルに表示されます。出力にタイムスタンプを付けて、実行したままにしておくと、戻ってきていつ印刷されたかを確認できるようにする必要があります。

私はperlスクリプトにパイプしようとしました:

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

このコマンドの使用:

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

しかし、ログは空です。申し訳ありませんが、実行中のアプリケーションについて詳しく説明できません。

4

2 に答える 2

4

バッファリングに苦しんでいますか?設定

$| = 1;

スクリプトの上部にあります。

于 2012-07-06T15:56:30.063 に答える
0

おそらく、@mob の回答が当面の問題を解決しました。ただし、モードでLog::Log4perlを使用することを検討することをお勧めしeasyます。これにより、何度も車輪の再発明を行う必要がなくなり、簡単に構成可能なログ レベルを無料で取得できます。

#!/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] - 簡単なことを難しくしよう!
2012/07/07 20:41:57 log.pl [6] - 簡単なことを難しくしよう!
2012/07/07 20:41:57 log.pl [10] - 簡単なことを難しくしよう!
2012/07/07 20:41:57 log.pl [11] - 簡単なことを難しくしよう!
2012/07/07 20:41:57 log.plで完了

次の点にも注意してください。

これは、人々が Log::Logperl にゆっくりと慣れるのにうまく機能することが証明されていますが、(カテゴリ、アペンダー、レベル、レイアウト) をいじるためにたくさんの異なるノブを使って、頭の上でそれらを壊すことを効果的に回避していますが、Log の全体的な使命: :Log4perl は、コンセプトに慣れるために、最初からカテゴリを使用できるようにするためのものです。したがって、これは man ページにかなり隠しておきます (ここまでお読みいただきありがとうございます :)。

于 2012-07-08T00:43:28.527 に答える