2

我正在编写一个简单的 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 方法时打开和关闭文件?

谢谢!

4

2 回答 2

1

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

下一个问题是您的脚本对资源的消耗程度如何?大概(因为它是最常见的)场景是在 Web 服务器的范围内?在这种情况下 - 您可能同时请求同一个脚本(这就是您首先锁定的原因?) - 您不想处于一个请求挂起的位置 - 等待第一个实例释放锁的脚本。

我的方法是将文件句柄保持在尽可能短的时间,因为它是一个明显的瓶颈。

于 2013-04-15T14:32:56.843 回答
0

我认为最好的做法是打开/关闭它。但它是 PHP 我不认为两者之间的差异有很大的影响。

如果你想确保没有泄漏,只需打开 -> 写入 -> 关闭

于 2013-04-15T14:21:51.047 回答