我们正在使用Zend_Log类来更新一些不同的“看门狗”数据库表(记录不同的事件:运行批处理脚本,处理新数据,生成文件等)。
这是我目前的代码(在我正在研究修复之前。)
$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
?
答案 0 :(得分:2)
我想要提出的另一个解决方案是将Zend_Db_Expr
与NOW()或TIMESTAMP()等MySQL函数一起使用。
$dblog->setEventItem('datetime', new Zend_Db_Expr('NOW()'));
答案 1 :(得分:1)
扩展似乎是最好的主意。
我会使用默认列created_at
和updated_at
创建一个时间戳事件,并在每次日志写入时自动更改。
(这是Timestampable behaviour from Doctrine)
My_Log_Writer_Db_Timebstampable extends Zend_Log_Writer_Db