Как записать информацию о вызывающем классе? - PullRequest
0 голосов
/ 23 апреля 2011

Я хотел бы переопределить класс CI_Log для улучшения строк журнала. Я хочу записать имя вызывающего класса и метод. Пример:

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

Я попытался переопределить метод write_log следующим образом:

<?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";

        [...]
    }

}

Но это не работает, $this->router недоступен. Не могли бы вы помочь мне?

Ответы [ 2 ]

1 голос
/ 24 апреля 2011

Вы можете использовать где-нибудь в вашем методе:

//$RTR is available from system/core/CodeIgniter.php
global $RTR;
$router_class = $RTR->fetch_class();
$rotuer_method = $RTR->fetch_method();
0 голосов
/ 26 апреля 2011

Хорошо, я думаю, что понял. Вот мой код:

    [...]

    $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";

    [...]

Я надеюсь, что это может помочь другим! : -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...