我正在尝试在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;
它给出了上述错误
发生这种情况的确切原因是什么?如何避免这个错误?
答案 0 :(得分:4)
从一些搜索中,似乎Thread :: Pool使用use load
编译指示存在问题:
在perl 5.8.8下创建对象时,添加'use Thread :: Pool'会导致项目出现问题 被祝福了。具体来说,在许多情况下通常返回值的代码 然后祝福显示为null。从Thread :: *中删除'use load'pragma可以解决问题。
这个模块确实很方便,但在我看来,它有一些严重的问题。 [...] 其次,该模块使用'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
,或者使用不同的模块。