2

Linux マシンに Log4perl がインストールされており、次のものがあります/path/to/log4perl.conf

log4perl.logger.Fizz = INFO, FizzAppender
log4perl.logger.Buzz = INFO, BuzzAppender

log4perl.appender.FizzAppender = Log::Dispatch::FileRotate
log4perl.appender.FizzAppender.filename = /my/logs/fizz-log.txt
log4perl.appender.FizzAppender.max = 1
log4perl.appender.FizzAppender.DatePattern = yyyy-MM-dd
log4perl.appender.FizzAppender.TZ = EST
log4perl.appender.FizzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.FizzAppender.layout.ConversionPattern = %d %m %n

log4perl.appender.BuzzAppender = Log::Dispatch::FileRotate
log4perl.appender.BuzzAppender.filename = /my/logs/buzz-log.txt
log4perl.appender.BuzzAppender.max = 1
log4perl.appender.BuzzAppender.DatePattern = yyyy-MM-dd
log4perl.appender.BuzzAppender.TZ = EST
log4perl.appender.BuzzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.BuzzAppender.layout.ConversionPattern = %d %m %n

各 perl スクリプトの内部 (各スクリプトは、異なるアペンダーと異なるログ ファイルへのログを使用します):

use Log::Log4perl;

my $log_conf = "/path/to/log4perl.conf";
Log::Log4perl::init($log_conf);

# In one script the logger is a "Fizz" logger (like below), and in the other
# script the logger is a "Buzz" logger.
my $logger = Log::Log4perl->get_logger("Fizz");

$logger->info("This should work.");

各スクリプトは異なるアペンダーを使用し、異なるファイルにログを記録しますが、それらはすべて同じ動作をするはずです。

  • 各ログは 1 日 1 回ローテーションされ、古い (ローテーションされた) ログは削除されます

このスクリプトを 24 時間以上実行していますが、 .log の下にログが生成されていませ/my/logs/ん。

だから私は尋ねます:私はlog4perl.conf間違っていますか?そうでない場合、問題を診断するにはどうすればよいですか? perl スクリプトでライブラリを正しく初期化していませんか? 前もって感謝します。

4

1 に答える 1

1

ファイルにパラメータmodeを追加する必要があると思います。log4perl.conf

log4perl.appender.FizzAppender.mode = truncate
log4perl.appender.BuzzAppender.mode = truncate

速度を上げるために、DatePatternを次のように変更しました。

log4perl.appender.FizzAppender.DatePattern = yyyy-MM-dd-HH-MM
log4perl.appender.BuzzAppender.DatePattern = yyyy-MM-dd-HH-MM

これがあなたのlog4perl.confファイルを使ったテストです。Perlスクリプトのコピーを2つ作成しました。

  • log4perl_Buzz.pl
  • log4perl_Fizz.pl

スクリプト内にループを追加して、毎秒メッセージをそれぞれのログファイルに記録するようにしました。

while (1) {
  $logger->info("This should work.");
  sleep 1;
}

両方を同時に実行すると、watch ls -l:を使用して次の結果が表示されます。

Every 2.0s: ls -l                    Thu Dec 20 21:16:51 2012

total 12
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Buzz.pl
-rw-rw-r-- 1 saml saml 978 Dec 20 21:07 log4perl.conf
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Fizz.pl

2つのスクリプトを実行した後:

Every 2.0s: ls -l                    Thu Dec 20 21:17:56 2012

total 20
-rw-rw-r-- 1 saml saml  39 Dec 20 21:17 buzz-log.txt
-rw-rw-r-- 1 saml saml  39 Dec 20 21:17 fizz-log.txt
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Buzz.pl
-rw-rw-r-- 1 saml saml 978 Dec 20 21:07 log4perl.conf
-rwxrwxr-x 1 saml saml 358 Dec 20 20:15 log4perl_Fizz.pl

約2分経過後:

Every 2.0s: ls -l                    Thu Dec 20 21:19:05 2012

total 28
-rw-rw-r-- 1 saml saml  195 Dec 20 21:19 buzz-log.txt
-rw-rw-r-- 1 saml saml 2340 Dec 20 21:18 buzz-log.txt.1
-rw-rw-r-- 1 saml saml  234 Dec 20 21:19 fizz-log.txt
-rw-rw-r-- 1 saml saml 2301 Dec 20 21:18 fizz-log.txt.1
-rwxrwxr-x 1 saml saml  358 Dec 20 20:15 log4perl_Buzz.pl
-rw-rw-r-- 1 saml saml  978 Dec 20 21:07 log4perl.conf
-rwxrwxr-x 1 saml saml  358 Dec 20 20:15 log4perl_Fizz.pl

これが家で遊んでいる人のための私のバージョンですlog4perl.conf8-)。

log4perl.logger.Fizz = INFO, FizzAppender
log4perl.logger.Buzz = INFO, BuzzAppender

log4perl.appender.FizzAppender = Log::Dispatch::FileRotate
log4perl.appender.FizzAppender.filename = fizz-log.txt
log4perl.appender.FizzAppender.max = 1
log4perl.appender.FizzAppender.DatePattern = yyyy-MM-dd-HH-MM
log4perl.appender.FizzAppender.TZ = EST
log4perl.appender.FizzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.FizzAppender.layout.ConversionPattern = %d %m %n
log4perl.appender.FizzAppender.mode = truncate

log4perl.appender.BuzzAppender = Log::Dispatch::FileRotate
log4perl.appender.BuzzAppender.filename = buzz-log.txt
log4perl.appender.BuzzAppender.max = 1
log4perl.appender.BuzzAppender.DatePattern = yyyy-MM-dd-HH-MM
log4perl.appender.BuzzAppender.TZ = EST
log4perl.appender.BuzzAppender.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.BuzzAppender.layout.ConversionPattern = %d %m %n
log4perl.appender.BuzzAppender.mode = truncate

これらは、これを理解するのに役立つリソースでした。

于 2012-12-21T02:21:59.877 に答える