加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP从记录事件中获取行号

发布时间:2020-12-13 22:41:03 所属栏目:PHP教程 来源:网络整理
导读:好的,我的Logging Class还有另一个问题 HERE,但我希望能够将调用脚本的行号添加到日志文件条目中. 我见过__Line__但是这给了我这行所在行的行号. 例: a.php只会 $log = new Logger();$log-debug('hello'); // Say this is line #20 现在在debug()的Logger.p
好的,我的Logging Class还有另一个问题 HERE,但我希望能够将调用脚本的行号添加到日志文件条目中.

我见过__Line__但是这给了我这行所在行的行号.

例:

a.php只会

$log = new Logger();
$log->debug('hello'); // Say this is line #20

现在在debug()的Logger.php类中,我使用了__Line__ Magic Constant,例如第300行.当我运行脚本时,我希望日志条目读取’在第20行’,但它在’第300行’上读取.除了将行号传递给函数之外还有其他方法可以做到这一点吗?

示例调试类函数

public function debug($message) {
        if(DEBUG) {
            $this->calling_script = $this->getScriptBaseName();
            $this->log_file = LOG_FILE_DIRECTORY."/".$this->calling_script.".log";
            $this->fh = fopen($this->log_file,'a') or die("Can't open log file: ".$this->log_file);

            if($this->first_run) {
                $this->log_entry = "n[" . date("Y-m-d H:i:s",mktime()) . "][debug][line:".__LINE__."]:t".$message."n";
            } else {
                $this->log_entry = "[" . date("Y-m-d H:i:s",mktime()) . "][debug][line:".__LINE__."]:t".$message."n";
            }       
            fwrite($this->fh,$this->log_entry);
            fclose($this->fh);

            $this->first_run = false;
        }       
    }

编辑:debug_backtrace()工作得很好!!!在下面工作

public function debug($message) {
        if(DEBUG) {
            $debug_arr = debug_backtrace();
            $this->calling_script = $this->getScriptBaseName();
            $this->log_file = LOG_FILE_DIRECTORY."/".$this->calling_script.".log";
            $this->fh = fopen($this->log_file,mktime()) . "][debug]:t".$message." [line:".$debug_arr[0]['line']."]n";
            } else {
                $this->log_entry = "[" . date("Y-m-d H:i:s",mktime()) . "][debug]:t".$message." [line:".$debug_arr[0]['line']."]n";
            }       
            fwrite($this->fh,$this->log_entry);
            fclose($this->fh);

            $this->first_run = false;
        }       
    }
您必须为此使用 debug_backtrace,否则始终将该行(使用__LINE__)传递给该函数.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读