1

Perl を使用してアプリケーションを構築しようとしています。このアプリケーションは、perl のThread::PoolパッケージLog4Perlで構成されています。

Thread::Poolパッケージのロギングを除外すると動作します。しかし、それを含めると、次のようなエラーが発生します。

ERROR: can't load appenderclass 'Log::Log4perl::Appender::File'
Could not find file for 'Log::Log4perl::Appender::File' at C:/Perl/site/lib/load.pm line 214.

作業コード:

# use Thread::Pool;
use Log::Log4perl;

my $log_conf = 'LoggingConfiguration.conf';
Log::Log4perl::init($log_conf);
my $logger = Log::Log4perl->get_logger();
$logger->info(" Info Msg ");

しかし、コメントを削除すると

use Thread::Pool;

上記のエラーが発生します

これが起こる正確な理由は何ですか?このエラーを回避するにはどうすればよいですか?

4

1 に答える 1

4

use loadいくつかの検索から、Thread::Pool のプラグマの使用に問題があるようです:

Thread::Pool バグトラッカーから:

perl 5.8.8 でオブジェクトを作成する場合、'use Thread::Pool' を追加すると、アイテムが bless されるときに問題が発生します。具体的には、多くの場合、通常は値を返し、bless されるコードは null として表示されます。Thread::* から「use load」プラグマを削除すると、問題が修正されます。

Thread::Pool on cpanratings :

このモジュールは確かに便利ですが、私の意見では、いくつかの深刻な問題があります。[ ... ] 次に、このモジュールは「use load」を使用しているため、Log::Log4perl が誤動作します。それは確かに 1 つの邪悪なハイゼンバグです。このソース ファイル ( http://w2c.martin.majlis.cz/w2c/doc-gen/crawler_8pl_source.html - リンクが壊れています) でチェコ語のコメントを見つけたからといって、デバッグに何日もかかりませんでした。

PerlMonks 上の Log4Perl での Thread::Pool の問題- 未解決ですが、回答は次のとおりです。

Thread::Pool を使用しないでください。バギーです。Thread::Queueに切り替えます。(OP の応答: Thread::Queue で持続する問題)

Thread::Pool::Simpleを試すこともできます。私は Thread::Pool よりも運が良かったです。

したがって、コンセンサスは、use loadThread::Pool から削除してみるか、別のモジュールを使用することです。

于 2014-10-06T08:50:32.087 に答える