Я хочу внедрить ведение журнала в нескольких служебных классах, например. г. ДБИ. Как лучше всего это сделать с помощью Log::Log4perl?
Я думаю, что можно создать подкласс DBI (скажем, MyDBI
) и переопределить некоторые методы, чтобы заставить их вести журнал. Но есть проблема с категориями. Если вы создаете регистратор с
Log::Log4perl->get_logger(ref $self || $self)
тогда все записи журнала принадлежат MyDBI
и их будет сложно отфильтровать. Так что мне кажется лучше передать регистратор в MyDBI
из вызывающего модуля (скажем, MyModule
), чтобы эта категория была семантически правильной. Первый вопрос, это вообще нормально? Я имею в виду, есть ли какие-то подводные камни в отношении такого подхода?
Второй вопрос, как передать логгер на MyDBI
? У меня есть идея объявить глобальную переменную, например. г. $MyDBI::logger
и установить в вызывающем методе:
local $MyDBI::logger = Log::Log4perl->get_logger(ref $self || $self);
Существует традиционная неприязнь к глобальным переменным. Можете ли вы придумать лучший способ?
EDIT: Конечно, лучший код — это отсутствие кода. caller
было бы достаточно, если бы учитывалось наследование.
Третий вопрос: можно ли войти в обе категории, MyDBI
и MyModule
, с помощью Log::Log4perl, если они иерархически не связаны?