Как включить ведение журнала в модуль Perl?

#perl #logging

#perl #ведение журнала

Вопрос:

Я хотел бы включить ведение журнала в модуль Perl, который я пишу, но сохранить переносимость, чтобы приложения, которые его используют, не были привязаны к определенному механизму ведения журнала, такому как Log::Log4Perl.

Я рассмотрел;

  1. Вход в STDERR и предоставление приложению перенаправлять эти сообщения на собственный механизм ведения журнала (как указано в Log :: Log4Perl FAQ).
  2. В том числе нет ведения журнала в модуле вообще.

Я подозреваю, что есть лучший способ.

Ответ №1:

Log::Any

Log::Any позволяет модулям CPAN безопасно и эффективно регистрировать сообщения, позволяя приложению выбирать (или отказываться выбирать) механизм ведения журнала, такой как Log::Dispatch или Log::Log4perl.

Комментарии:

1. Это выглядит действительно интересно. Я не могу найти много обсуждений по этому поводу, некоторым мне любопытно, использует ли кто-нибудь это?

2. Обратный поиск зависимостей показывает некоторое использование: metacpan.org/requires/distribution/Log-Any?sort =[[2,1]] . Я собираюсь попробовать.

Ответ №2:

Каким бы способом вы ни поступили в конечном итоге, вам придется выбрать один, и это привяжет его к механизму. Так что можете выбрать один.

Почему бы не проверить, доступен ли Log::Log4Perl? Если это так, отлично, используйте его. Если нет, либо реализуйте обратный вызов, к которому могут подключаться ваши пользователи, либо минимальный набор API, позволяющий им контролировать, что (или если) вы вообще регистрируете?