Log :: Log4perl :: Appender :: File的Perl错误

时间:2014-10-06 07:12:50

标签: multithreading perl log4perl

我正在尝试在Perl的帮助下构建应用程序。该应用程序由来自perl的Thread::PoolLog4Perl个包组成。

当我排除包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;

它给出了上述错误

发生这种情况的确切原因是什么?如何避免这个错误?

1 个答案:

答案 0 :(得分:4)

从一些搜索中,似乎Thread :: Pool使用use load编译指示存在问题:

来自Thread::Pool bug tracker

  

在perl 5.8.8下创建对象时,添加'use Thread :: Pool'会导致项目出现问题   被祝福了。具体来说,在许多情况下通常返回值的代码   然后祝福显示为null。从Thread :: *中删除'use load'pragma可以解决问题。

Thread::Pool on cpanratings

  

这个模块确实很方便,但在我看来,它有一些严重的问题。   [...]   其次,该模块使用'use load'导致Log :: Log4perl出现故障。那肯定是一个邪恶的heisenbug。这只是因为我在这个源文件(http://w2c.martin.majlis.cz/w2c/doc-gen/crawler_8pl_source.html - 链接已损坏)中发现捷克语注释,它没有花费我几天的调试时间。

Thread::Pool issues with Log4Perl on PerlMonks - 尚未解决,但答案包括:

  

不要使用Thread :: Pool。它是马车。切换到Thread::Queue。 (OP的回答:Thread :: Queue存在问题)

     

您也可以尝试Thread::Pool::Simple。我有比Thread :: Pool更好的运气。

所以共识是尝试从Thread :: Pool中删除use load,或者使用不同的模块。