Я хотел бы иметь модули, управляющие их протоколированием во время выполнения, но не имея всего ссылающегося на один монолитный файл конфигурации. Когда речь идет о процессах, работающих под разными разрешениями, я действительно не хочу иметь дело с каждым процессом, который должен иметь доступ к каждому журналу в системе, когда они только пишут подмножество из них.Log4perl: Как динамически загружать приложения во время выполнения?
Однако в руководстве Log4perl я не нашел документацию о том, как инициализировать дополнительные приложения из файла конфигурации во время выполнения. http://metacpan.org/pod/Log::Log4perl::Appender ссылается на метод add_appender, но работает с экземплярами объектов-экземпляров вместо conf-файлов. Он также не определяет объекты журнала и отношения logger-> appender.
Я пробовал иметь каждый пакет init из своего собственного 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
Как я могу разобрать и добавить конфигурацию в текущей конфигурации?
Редактировать: Probalem с использованием переменной пакета заключается в том, что это просто роль Moose, потребляемая различными классами, в значительной степени просто MooseX :: Role :: Parameterized версия ответа Ether в Making self-logging modules with Log::Log4perl. Таким образом, мой регистратор заполняется в библиотеку, потребляющую его, и у меня нет глобальной переменной, с которой я могу работать каждый раз, когда я ее использую.
Хотя ..
Если я объявить глобальную переменную за пределами MooseX :: Роль :: Параметризованная роль блока, будет каждый класс, который потребляет роль будет использовать этот же переменный конф?
Кто-нибудь? Я немного взглянул на источник для Log4perl, но я не могу быть первым, кто когда-либо хотел это сделать. Я пытаюсь сделать параметризацию Moose, которую я могу применить к классам, которые позволяют мне передать файл конфигурации в эту роль, и он просто делает правильную вещь, либо инициируя файл conf, либо добавляя конфигурацию конфига в текущую инициализированную Log4perl. – Oesor
@Oesor: Пакет global по-прежнему глобальный, даже если он объявлен в роли Moose. Для использования ролей должно быть легко изменить решение (вместо механизма «BUILD» вы можете использовать «вокруг BUILDARGS» с очень похожим кодом). – bvr
@Oesor: Обновленный код ниже на предыдущий комментарий. – bvr