WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:perlのログ出力API-Log4perlでログの世代管理が上手くいかず困っています。

0:[投稿] あゆみん [MAIL] [2004/01/16 17:26 ][環境:Windows2000(自分使用マシン) HP-UNIX(Windows2000からtelnetでログイン)]

はじめまして。初めて投稿させて頂くあゆみんという者です。
開発の仕事を初めてまだ2ヶ月弱と間もないのですが、
今現在perlでのlog出力API-Log4perl(log4jと似た感じです)
を用いて、ログの世代管理を実装させる作業をしております。
本日はどうしても題記について解決できないことがあり、
投稿させて頂きました。

今現在、上記のようにPerlのログ出力APIである、Log4perlでログ出力処理を行おうとしています。世代管理を考慮しない普通のログ出力であれば、Log::Log4perl::Appender::Fileを用いてできます。しかし、ログの世代管理となると上手くいかないのです。
(よくあると思いますが、test.logというファイルがあって、ファイルがある程度の大きさになったら、test.log.1というファイルを作成し、test.logには新しい内容を加えていくというものです。)
Log4perlやCPANのHPを見ましたら、Log::Dispatch::Filerotateというモジュールがそれに相応するということで、UNIXマシンにCPANからLog::log4perlモジュールとLog::Dispatch::FileRotateをインストールしました。
(モジュールはダウンロードした後に、tar.gz形式だったのでUNIXコマンドのgunzipとtarで解凍し、perl Makefile.PL・make・make test・make installを実行しました。)

制御ファイルは下記のように記載しています。
---------------------------------------------------------
#ファイル名称:「log4perl.conf」 
#格納場所:/etc/log4perl.conf(ローカルテスト環境)

#ログファイル出力設定
log4perl.category = DEBUG,FR1
log4perl.appender.FR1 = Log::Dispatch::FileRotate
log4perl.appender.FR1.filename = logfile1_0116_LF1_01.log
log4perl.appender.FR1.mode = append
log4perl.appender.FR1.size = 0.005 
  #5KB(テスト用なので少なめ。デフォルトは10MBで「10」という記述なので、数字表記にしてみました。)
log4perl.appender.FR1.max = 3
   #ログの世代は3世代まで(デフォルトは1)

#ログファイルのフォーマット定義
log4perl.appender.FR1.layout = PatternLayout
#今現在、ログに出力されているフォーマットは次行。
log4perl.appender.FR1.layout.ConversionPattern = %d %P %p %r %H %F %L %C - %m%n
------------------------------------------------------------

プログラム出力ファイルは下記のように記載しています。
------------------------------------------------------------
use Log::Log4perl;
use Log::Dispatch::FileRotate;

#初期設定ファイル読み込み
Log::Log4perl::init_and_watch('/etc/log4perl.conf',10);

#loggerインスタンスの取得
my $logger = Log::Log4perl->get_logger();

#ログ出力
$logger -> debug('debug message.');
$logger -> info('info message.');
$logger -> warn('warn message.');
$logger -> error('error message.');
$logger -> fatal('fatal message.');
------------------------------------------------------------

インストールすべきモジュールが足りでいなかったり、制御ファイルやプログラムの書き方がいけないのでしょうか?
恥ずかしながら、この問題に悩んで1週間程たってしまいました…。
困っているところに検索を書けたら、このHPにたどり着きました。
もしLog4perlでのログ世代管理についてご存知の方がいらっしゃいましたら、ご助言を頂きたく思います。よろしくお願い致します。


1:[回答] ふじ [2004/01/16 18:53 ]

> log4perl.appender.FR1.size = 0.005 
これ、バイト数ですね。(MBではなくて)

手元の環境 (Perl-5.8.1, Log::Log4perl 0.4, Log::Dispatch::FileRotate) でやってみたら、
バイト数で希望の動作をするようです。

ソースコード (FileRotate.pm) では、

$size = $ten_meg unless $size =~ /^\d+$/ && $size < $two_gig && $size > 0;

このような記述があるので、整数 (0〜9 の数字の連続のみ) でないとダメそうです。


2:[関連] あゆみん [MAIL] [2004/01/16 19:01 ]

ふじ様

ご返答、ありがとうございます(m_m)
早速試してみます!!


3:[回答] ふじ [2004/01/16 19:04 ]

しかし Log::Dispatch::FileRotate (VERSION 1.11) の perldoc を見ると、

my $file = Log::Dispatch::FileRotate->new( name => 'file1',
# 中略
                                          size      => 10,
                                        );

という SYNOPSIS が書いてあって、デフォルトが 10MB なのだから
size は MB 単位だと誤解しても当然というか。
# 10byte でログをローテートする人はいないわけで…


4:[関連] あゆみん [2004/01/16 19:33 ]

ふじ様

無事動作しました。
テストを行いたかっただけなので、少ない容量指定でやろうと
思っていましたが、確かに非現実的ですね。
1週間も悩んだ自分は一体何だったのか…(苦笑)

ありがとうございました。
助かりました。


5:[完了] あゆみん [2004/01/16 20:09 ]

すいません、関連ではなく完了でしたね。
失礼しました(m_m)

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World