Динамически устанавливать пользовательские элементы событий для каждого вызова журнала с помощью Zend Framework - PullRequest
1 голос
/ 10 июля 2010

Мы используем класс Zend_Log для обновления нескольких разных таблиц базы данных «watchdog» (которые регистрируют различные события: запускаются пакетные сценарии, обрабатываются новые данные, генерируются файлы и т. Д.).

Здесьмой текущий код (перед проблемой я смотрю на исправление.)

$writer = new Zend_Log_Writer_Db($db, 'watchdog', array(
    'priority'  => 'priority',
    'message'   => 'message',
    'owner'     => 'owner',
));

$logger = new Zend_Log($writer);
$logger->setEventItem('owner', 'MODULE_NAME');

Это прекрасно работает.Но я хочу добавить столбец базы данных с именем datetime, который является вызовом time() во время события.Итак, теоретически, это будет примерно так:

$writer = new Zend_Log_Writer_Db($db, 'watchdog', array(
    'priority'  => 'priority',
    'message'   => 'message',
    'owner'     => 'owner',
    'datetime'  => 'datetime',
));

$logger = new Zend_Log($writer);
$logger->setEventItem('owner', 'MODULE_NAME');
$logger->setEventItem('datetime', time());

Проблема, с которой я сталкиваюсь, заключается в том, что, очевидно, вызов time () запускается в первый раз, когда вызывается Zend_Log::setEventItem ине когда Zend_Log::info() вызывается.Итак, вопрос в том, как заставить time() быть вызванным и сохраненным в моей БД при вызове Zend_Log::info()?Нужно ли будет расширять Zend_Log_Writer_Db более специальным классом?

Ответы [ 2 ]

2 голосов
/ 15 июля 2010

Другое решение, которое я хотел предложить, - использовать Zend_Db_Expr с функцией MySQL, такой как NOW () или TIMESTAMP ().

$dblog->setEventItem('datetime', new Zend_Db_Expr('NOW()'));
1 голос
/ 10 июля 2010

Расширение кажется лучшей идеей.

Я бы создал событие с отметкой времени со столбцами по умолчанию created_at и updated_at и изменил бы его автоматически при каждой записи в журнал.

(это поведение с отметкой времени из Doctrine)

My_Log_Writer_Db_Timebstampable extends Zend_Log_Writer_Db
...