実行時にログを管理するモジュールが必要ですが、すべてが単一のモノリシック構成ファイルを参照することはありません。さまざまなアクセス許可で実行されているプロセスを処理する場合、システム上のすべてのログにアクセスできるようにする必要がある各プロセスを処理したくありません。
ただし、Log4perl マニュアルには、実行時に構成ファイルから追加のアペンダーを初期化する方法に関するドキュメントはあまり見つかりません。http://metacpan.org/pod/Log::Log4perl::Appenderは add_appender メソッドを参照しますが、conf ファイルではなく、インスタンス化されたアペンダー オブジェクトで機能します。また、ロガー オブジェクトと logger->appender 関係も定義しません。
各パッケージを独自のconfから初期化しようとしましたが、初期化されるたびに既存の構成が単純に上書きされます。私がやりたいことは、次のようなものです。
my $foo = Foo->new() ## Checks Log::Log4perl::initialized(), sees that it
## hasn't been initalized yet, inits Log4perl from foo.conf
my $bar = Bar->new() ## Checks Log::Log4perl::initialized(), sees that it
## has been initalized. Adds appenders and loggers defined
## in bar.conf into the initialized configuration
構成を解析して現在の構成に追加するにはどうすればよいですか?
編集:パッケージ変数を使用する際の問題は、これがさまざまなクラスによって消費される Moose ロールにすぎないことです。ほとんどの場合、Making self-logging modules with Log::Log4perlの Ether の回答の MooseX::Role::Parameterized バージョンです。したがって、私のロガーはそれを使用するライブラリに組み込まれており、使用するたびに作業できるグローバル変数がありません。
けれど..
MooseX::Role::Parameterized ロール ブロックの外でグローバル変数を宣言すると、そのロールを使用するすべてのクラスが同じ conf 変数を使用することになりますか?