2011-12-16 2 views
1

У меня есть класс исключения:Настройка протоколирования ошибок для Кохана

class MartbooksException extends Exception 
{ 
    public function __construct($msg) 
    { 
     parent::__construct($msg, 0, null); 
     echo $msg; 
     Kohana::$log->add(Log::ERROR, $msg); 
    } 
} 

Kohana :: $ лог-> добавить (Вход :: ERROR, $ MSG);

Это все, что я должен сделать, чтобы записывать журналы в файлы приложений/журналов?

Это хорошее решение?

ответ

4

Чтобы следовать стилю Kohana я рекомендовал бы использовать:

Class Martbooks_Exception Extends Kohana_Exception 

декларативно и поместить файл с именем exception.php в classes/martbooks. Это следует за стилем Коханы.

Расширение Kohana_Exception вместо Exception позволяет использовать подстановку переменных вдоль линий

throw new Martbooks_Exception ('this is a :v', array (':v' => 'variable',)); 

Что касается определяющей в __construct() -метода, то echo $msg; часть не будет мой предпочтительный способ решения обработки ошибок , любое эхо должно быть сделано в блоке, который ловит исключение. То же самое можно было бы аргументировать в случае вызова Kohana::$log->add(), но если вы хотите вести журнал каждые Martbooks_Exception, ваше решение отлично подходит. В этом случае я бы переписать код:

Class Martbooks_Exception Extends Kohana_Exception 
{ 
    public function __construct($message, array $variables = NULL, $code = 0) 
    { 
    parent::__construct ($message, $variables, $code); 
    Kohana::$log->add (Log::ERROR, __ ($message, $variables)); 
    } 
} 

с определением __construct(), что соответствует Kohana_Exception «s __construct().

Единственное возражение, которое я хотел бы противопоставить протоколу с уровнем Log::ERROR в конструкторе, заключается в том, что он предполагает, что каждое исключение представляет собой ошибку уровня приложения, которая может относиться к некоторым типам исключений, но она также может использоваться для сигнализации других значения. Точный смысл исключения следует оставить в блоке обработки исключений.

1

Чтобы добавить сообщение в журнал, вам нужно только одну строку; Kohana::$log->add($level, $message[, $values])see the api

Кроме того, я не думаю, что это допустимое решение. Вам лучше создать свой собственный обработчик исключений, как вы можете видеть на this page из userguide