2011-04-23 2 views
0

Je voudrais remplacer la classe CI_Log pour améliorer les lignes de journal. Je veux enregistrer le nom de la classe appelante et la méthode. Exemple:Comment enregistrer les infos de la classe appelante?

DEBUG - 2011-04-23 09:21:29 - MY_Class - method --> Router Class Initialized 

J'ai essayé de passer outre le write_log mehod comme ceci:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Log extends CI_Log { 

    public function write_log($level = 'error', $msg, $php_error = FALSE) 
    { 
     [...] 

     $message .= 
      $level . 
      (($level == 'INFO') ? ' - ' : ' - ') . 
      $this->router->fetch_class() . 
      ' - ' . 
      $this->router->fetch_method() . 
      ' - ' . 
      date($this->_date_fmt). ' --> ' . 
      $msg . 
      "\n"; 

     [...] 
    } 

} 

Mais cela ne fonctionne pas, le $this->router est pas accessible. Pourriez-vous m'aider?

+0

Bien sûr, '$ this-> router' ne fonctionnerait que pour les contrôleurs, ce n'est donc pas une bonne idée. Je voudrais que cela fonctionne pour les modèles et ainsi de suite ... –

Répondre

0

Ok, je pense que je l'ai eu. Voici mon code:

[...] 

    $message .= $level.(($level == 'INFO') ? ' - ' : ' - ') . date($this->_date_fmt); 

    $stack = debug_backtrace(); 
    // We are searching for the 2nd element of the $stack array beacause : 
    // - $stack[0] is always taken by JG_Log->write_log() 
    // - $stack[1] is always taken by log_message() 
    if (isset($stack[2]['class'])) { 
     $message .= ' - ' . $stack[2]['class'] . ' - ' . $stack[2]['function']; 
    } 

    $message .= ' --> '.$msg."\n"; 

    [...] 

J'espère que cela peut aider les autres! :-)

1

Vous pouvez utiliser quelque part dans votre méthode:

 
//$RTR is available from system/core/CodeIgniter.php 
global $RTR; 
$router_class = $RTR->fetch_class(); 
$rotuer_method = $RTR->fetch_method(); 
+0

Merci pour votre réponse. Comme la classe Log est initialisée avant la classe Router, j'ai dû utiliser cette syntaxe: '$ router_class = ''; \t \t $ router_method = ''; \t \t // $ RTR est disponible à partir de system/core/CodeIgniter.php \t \t global $ RTR; \t \t si (isset ($ RTR)) { \t \t \t $ router_class = $ RTR-> fetch_class(); \t \t \t $ router_method = $ RTR-> fetch_method(); \t Mais cela ne fonctionne que pour le contrôleur actuel ... –

+0

J'explique: Je voudrais que lorsque le contrôleur/modèle/tout ce qui appelle 'log_message ('debug', 'blabla');' il génère le ligne suivante 'DEBUG - 2011-04-23 09:21:29 - Classe - méthode -> Router Class Initialized' –

Questions connexes