سؤال

طيب عندي سؤال آخر هنا لفئة التسجيل الخاصة بي ولكني أردت أن أتمكن من إضافة رقم السطر الخاص بالبرنامج النصي للاتصال إلى إدخال ملف السجل.

لقد رأيت __خط__ ولكن هذا يعطيني رقم السطر الذي يوجد فيه هذا.

مثال:

a.php

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

الآن في فئة Logger.php الخاصة بي في debug() أستخدم ملف __خط__ الثابت السحري على سبيل المثال السطر رقم 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, '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]:\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__) إلى الوظيفة.

نصائح أخرى

هل رأيت debug_backtrace()؟لست متأكدًا من النفقات العامة بالرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top