我应该在哪里存储自定义的PHP日志?

时间:2012-05-02 13:19:43

标签: php zend-framework zend-db zend-log

我们在数据库(mysql)中维护了一些自定义日志。我们使用这些日志来跟踪zend框架应用程序中的最新错误和电子邮件活动。

我们最近发现这些日志对数据库造成了一些压力,因为我们在这些日志选项卡上执行多次读/写操作。它也会降低应用程序的速度,因为我们需要执行mysql INSERT,有时这些日志表会被其他SELECT查询锁定。

我们使用Zend_Log适配器来执行日志写入,如下所示:

    $columnMapping = array('url' => 'url', 'userAgent' => 'userAgent', 'info' => 'info', 'reffer' => 'reffer', 'userId' => 'userId', 'priority' => 'priority','dateInserted' => 'dateInserted', 'message' => 'message');
    $writer_db = new Zend_Log_Writer_Db($db, 'log', $columnMapping);

我们还有一个自定义的cronjob,可以每晚清除日志中的旧条目,这也会对数据库造成一些压力。

我们对这些日志的唯一要求是它们应该可以从中心位置搜索,因为我们有多个服务器编写这些日志。

在zend框架应用程序中编写日志的任何替代方法?在这种情况下可以提供帮助的任何好Zend_Log适配器?

1 个答案:

答案 0 :(得分:2)

您可以将文件记录器用于通过NTP在所有服务器之间共享的“驱动器”。可以使用标准的unix搜索工具(grep,awk等)进行搜索。

另一种解决方案是使用接收日志消息的Syslog编写器和set up a syslog server。有许多应用程序可以分析系统日志格式。

第三个选项是使用MongoDB作为日志的存储工具。 Here is an article解释了如何实现写入MongoDB的Log Writer。 MongoDB具有“异步插入”,因此您的应用程序不必等到日志条目写入数据库。