Использование Zend_Log в пользовательских классах

Я использую Zend_Log и другие необходимые классы без фреймворка MVC. Я хочу добавить возможности журналирования Zend (и другие модули в будущем) в свои пользовательские классы, и мне интересно, как лучше всего это сделать.

Прямо сейчас у меня есть оболочка для логера Zend, так что, предположительно, я могу получить к нему глобальный доступ:

My_log::log('Testing', Zend_Log::INFO);

Должен ли я добавлять этот код к каждому методу в моих классах, которые я хочу регистрировать? Должен ли я не создавать журналы внутри своих классов? Есть ли более разумный способ?

Я ценю помощь, DC


person Dietcheese    schedule 16.03.2011    source источник
comment
Концепция ведения журнала меня тоже беспокоит прямо сейчас. Но у меня также есть SOAP-вызовы на сервер регистрации для регистрации из множества разных экземпляров приложений в одном месте :(   -  person Tomáš Fejfar    schedule 30.03.2011


Ответы (1)


Контейнер внедрения зависимостей кажется отличным решением, если ваше приложение можно интегрировать. Все статические вызовы вызывают проблемы в тестовой среде.

просмотрите этот документ http://components.symfony-project.org/dependency-injection/trunk/book/04-Builder

В худшем случае я бы создал статический геттер, такой как My_Log::get()->error("message");, единственное, что теперь вы сможете легко исправить тестовую среду, чтобы заставить get возвращать поддельный экземпляр. Все, что вам нужно для My_Log, — это setLogger($logger), который заменит статический экземпляр макетом или чем-то еще. В любом случае, статические вызовы плохи:/ если возможно, попытайтесь разделить классы, чтобы они зависели от как можно меньшего количества классов. Даже внедрение регистратора вручную в конструктор класса — лучшая идея. Если у вас есть подключаемый модуль действий MVC или базовый контроллер, вы можете обеспечить отложенную загрузку getLogger(), чтобы ваш код мог выполнять $this->getLogger()->error('...');

искусство

person Art79    schedule 27.05.2011