Вот как я решил ту же проблему, но вам нужно абстрагироваться от вызова журналирования, который в любом случае спасет вас от ввода
в вашем bootstrap.php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initLogging() {
$log = new Zend_Log();
$writer_log = new Zend_Log_Writer_Stream(APPLICATION_PATH.'/../logs/'.APPLICATION_ENV.'.log');
$formatter = new Zend_Log_Formatter_Xml();
$writer_log->setFormatter($formatter);
$log->addWriter($writer_log);
Zend_Registry::set('logger', $log);
}
}
и где-то с глобальной областью действия
function debug($message, $level = Zend_Log::DEBUG) {
$backtrace = debug_backtrace();
Zend_Registry::get('logger')->setEventItem('file', $backtrace[1]['file']);
Zend_Registry::get('logger')->setEventItem('class', $backtrace[1]['class']);
Zend_Registry::get('logger')->setEventItem('function', $backtrace[1]['function']);
Zend_Registry::get('logger')->setEventItem('line', $backtrace[1]['line']);
Zend_Registry::get('logger')->log($message, $level);
}
смещение в массиве $ backtrace заключается в использовании функции выше той, которая вызывается, посмотрите на вывод debug_backtrace, если вам нужно посмотреть где-то еще
используется так
class SomeClass {
function func {
debug("Message");
}
}
и получается так (добавлено форматирование)
<logEntry>
<timestamp>2010-01-01T00::00+00:00</timestamp>
<message>Message</message>
<priority>7</priority>
<priorityName>DEBUG</priorityName>
<class>SomeClass</class>
<function>func</function>
<line>2</line>
</logEntry>