Следуйте принципу Information Expert в рекомендациях GRASP для объектно-ориентированного проектирования:
... возложите ответственность на занятия с наибольшим количеством информации, необходимой для ее выполнения.
Таким образом, вы будете писать в журнал из класса, который содержит данные, которые вам нужны для регистрации. Если событие, которое вы хотите записать, относится к работе модели, то запишите в журнал в модели. Если событие, которое требуется записать, относится к работе контроллера, то пишите в журнал в контроллере.
Создайте один вывод журнала для приложения. В противном случае вам придется искать много журналов, чтобы найти любую диагностическую информацию! Вы можете сохранить объект журнала в Zend_Registry
, чтобы вы могли вызывать журнал из любого класса в вашем приложении.
Ваши комментарии:
Лучше просто изящно выйти из строя, если регистратор не найден в ожидаемом разделе реестра. Под изящным сбоем я подразумеваю либо выводить ошибку в stdout (на веб-страницу), либо в stderr (в журнал сервера httpd), либо выдавать исключение и позволить приложению его обработать.
Что касается зависимостей, это не проблема. Каждый раз, когда класс использует другой класс, у вас возникает аналогичная зависимость. См. Шаблон проектирования Registry .