Php 使用Zend Framework为每个日志调用动态设置自定义事件项

Php 使用Zend Framework为每个日志调用动态设置自定义事件项,php,zend-framework,logging,Php,Zend Framework,Logging,我们使用Zend_Log类来更新几个不同的“看门狗”数据库表(记录不同的事件:批处理脚本运行、处理新数据、生成文件等) 这是我当前的代码(在问题出现之前,我正在研究修复) 这个很好用。但是,我想添加一个名为datetime的数据库列,它在事件发生时调用time()。因此,从理论上讲,它应该是这样的: $writer = new Zend_Log_Writer_Db($db, 'watchdog', array( 'priority' => 'priority', 'mes

我们使用Zend_Log类来更新几个不同的“看门狗”数据库表(记录不同的事件:批处理脚本运行、处理新数据、生成文件等)

这是我当前的代码(在问题出现之前,我正在研究修复)

这个很好用。但是,我想添加一个名为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()
时运行。因此,问题是,当调用
Zend_Log::info()
时,如何调用
time()
并将其存储在数据库中?我是否需要用一个更自定义的类扩展
Zend\u Log\u Writer\u Db

我将创建一个可时间标记的事件,在
处创建默认列
和在
处更新默认列
,并在每次日志写入时自动更改它

(这是一张照片)


我想提出的另一个解决方案是将
Zend\u Db\u Expr
与类似NOW()或TIMESTAMP()的MySQL函数结合使用


这最终正是我想要的。扩展和使用表达式都是很好的答案,但是表达式使它更平滑。
$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());
My_Log_Writer_Db_Timebstampable extends Zend_Log_Writer_Db
$dblog->setEventItem('datetime', new Zend_Db_Expr('NOW()'));