2012-05-02 75 views
2

我们有一些我们在数据库(mysql)中维护的自定义日志。我们使用这些日志来跟踪我们的Zend框架应用程序中最近发生的错误和电子邮件活动。我应该在哪里存储自定义php日志?

最近我们发现这些日志会在数据库上产生一些压力,因为我们在这些日志标签上执行多次读/写操作。由于我们需要执行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适配器可以在这种情况下提供帮助?

回答

2

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

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

第三个选择是使用MongoDB作为日志的存储设施。 Here is an article,它解释了如何实现写入MongoDB的日志写入器。 MongoDB具有“异步插入”,因此您的应用程序无需等待日志条目写入数据库。

+1

是的,一个nosql数据库可能是完美的这些日志。有趣的文章!谢谢! – aporat