最好在PHP中使用静态方法或对象作为记录器?

时间:2011-12-08 04:57:12

标签: php

下面有一个非常简单的Logger类,我的目标是进行日志函数调用并将数据写入日志文件,但无论我调用日志函数多少次,每页只能写1次

session_start();
class JD{
    static private $log = array();

    public function __construct(){  }

    // Simple logger
    // usage JD::log('debug', 'MySQLi Database Driver Initialized');
    public static function log($mode, $message){
        self::$log[] = '[' .$mode. '] = ' .$message. '\r\n';
        $_SESSION['jdlog'] = self::$log;

    }
}

测试

JD::log('debug', 'MySQLi Database Driver Initialized');
JD::log('debug2', 'MySQLi Database Driver Initialized');
JD::log('debug3', 'MySQLi Database Driver Initialized');
JD::log('debug4', 'MySQLi Database Driver Initialized');
JD::log('debug5', 'MySQLi Database Driver Initialized');
JD::log('debug6', 'MySQLi Database Driver Initialized');
print_r($_SESSION['jdlog']);

基于上面这个简单的代码,好像只是像我一样使用静态方法似乎更好但是我想将日志消息数组写入文件或其他地方,所以我当前上面的方法,它必须在每个函数调用上写入一个文件,这违背了我将每个调用保存到数组中的目的。

如果我使它成为常规类对象,那么我可以简单地实例化我的对象,根据需要进行日志函数调用,然后通过调用将数组写入文件的另一个函数在页面末尾进行1次写入,I也可以取消保存到会话。

你会怎样做这样简单的事情?

2 个答案:

答案 0 :(得分:1)

您可以编写一个析构函数方法来处理脚本执行结束时的文件写入。

答案 1 :(得分:0)

我绝对不相信会话功能来容纳日志数据,因为它本质上是易失性的,特别是如果您正在记录关键消息。您可能需要查看Zend_Log代码以获取提示。

说实话,我不认为存储多个并写一次是个好主意,以防脚本突然停止并且写入永远不会发生。