我应该在记录器类中存储打开的文件句柄以供以后使用吗?

时间:2013-04-15 14:19:52

标签: php logging

我正在写一个简单的Logger类,它将日志写入文件。我的log方法如下所示:


    public function log($level, $message)
    {
        $f = fopen($this->logFile, 'a');
        flock($f, LOCK_EX | LOCK_NB);
        fprintf($f, '[%s] %s: %s', date('Y-m-d H:i:s'), $level, $message);
        flock($f, LOCK_UN);
        fclose($f);
    }

我的问题很简单。我应该存储打开的文件句柄$f并在我写入时锁定/解锁它,还是每次调用log方法时都应该打开和关闭文件?

谢谢!

2 个答案:

答案 0 :(得分:1)

您在同一个脚本中“登录”了多少次?如果答案不止一个,那么理想情况下,您应该通过尽可能少地写入所有日志来优化脚本。

接下来的问题是你的脚本资源如何饥饿?据推测(因为它是最常见的)场景是在Web服务器的范围内?在这种情况下 - 您可能同时请求同一个脚本(这就是您首先锁定的原因?) - 您不希望处于一个请求挂起的位置 - 等待第一个实例脚本释放锁。

我的方法是将文件处理到最短的时间,因为它是一个明显的瓶颈。

答案 1 :(得分:0)

我认为最佳做法是打开/关闭它。但它是PHP我不认为它们之间的区别会产生很大的影响。

如果你想确保没有泄漏只是打开 - >写 - >靠近