Ошибка Perl с Log::Log4perl::Appender::File

Я пытаюсь создать приложение с помощью Perl. Приложение состоит из Thread::Pool и Log4Perl пакеты из perl.

Когда я исключаю пакет 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;

выдает вышеописанную ошибку

Какова точная причина этого? Как избежать этой ошибки?


person Sanjay Bhosale    schedule 06.10.2014    source источник
comment
Вы установили Log::Log4perl::Appender::File?   -  person Biffen    schedule 06.10.2014
comment
Да, я установил, что он работает правильно без Thread::Pool.   -  person Sanjay Bhosale    schedule 06.10.2014


Ответы (1)


Из некоторых поисков выяснилось, что есть проблемы с использованием Thread::Pool прагмы use load:

Из трекера Thread::Pool:

При создании объекта в perl 5.8.8 добавление «использовать Thread::Pool» вызывает проблемы при благословлении элементов. В частности, во многих случаях код, который обычно возвращает значения и затем благословляется, отображается как null. Удаление прагмы use load из Thread::* устраняет проблему.

Thread::Pool на cpanratings:

Этот модуль действительно удобен, но, на мой взгляд, с ним есть серьезные проблемы. [ ... ] Во-вторых, этот модуль использует 'use load', что приводит к сбоям в работе Log::Log4perl. Это, безусловно, один злой гейзенбаг. Это произошло только потому, что я нашел чешский комментарий в этом исходном файле (http://w2c.martin.majlis.cz/w2c/doc-gen/crawler_8pl_source.html — ссылка не работает), что мне не потребовалось несколько дней на отладку.

Thread::Poolпроблемы с Log4Perl на PerlMonks — нерешенные, но ответы включают:

Не используйте Thread::Pool. Это глючит. Переключитесь на Thread::Queue. (Ответ ОП: проблемы с Thread::Queue сохраняются)

Вы также можете попробовать Thread::Pool::Simple. С этим мне повезло больше, чем с Thread::Pool.

Таким образом, консенсус заключается в том, чтобы либо попытаться удалить use load из Thread::Pool, либо использовать другой модуль.

person i alarmed alien    schedule 06.10.2014