Question

Ok j'ai une autre question ICI pour ma Classe de log, mais je voulais être en mesure d'ajouter le numéro de la ligne du script d'appel à l'entrée de fichier journal.

J'ai vu __Ligne__ mais cela me donne le numéro de la ligne où c'est à l'.

Exemple:

a.php

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

Maintenant, dans mon Logger.php classe dans le debug() je le __Ligne__ La magie d'une façon Constante par exemple, la ligne n ° 300.Lorsque je lance le script, je voudrais l'entrée de journal à lire", sur la ligne 20 "mais c'lire", sur la ligne de 300".D'ailleurs en passant le numéro de ligne de la fonction est-il un autre moyen que je pouvais faire cela?

Exemple de débogage fonction de classe

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;
        }       
    }

EDIT:debug_backtrace() fonctionne très bien!!!De travail ci-dessous

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;
        }       
    }
Était-ce utile?

La solution

Vous aurez à utiliser debug_backtrace pour l'un ou l'autre toujours passer la ligne (avec __LINE__) à la fonction.

Autres conseils

Avez-vous vu DEBUG_BACKTRACE () ?Je ne suis pas sûr de ses frais généraux cependant.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top