我有异常类:
class MartbooksException extends Exception
{
public function __construct($msg)
{
parent::__construct($msg, 0, null);
echo $msg;
Kohana::$log->add(Log::ERROR, $msg);
}
}
Kohana :: $ log-> add(Log :: ERROR,$ msg);
我应该怎么做才能在应用程序/日志文件中写入日志?
这是一个好的解决方案吗?
答案 0 :(得分:4)
为了遵循Kohana风格,我建议您使用:
Class Martbooks_Exception Extends Kohana_Exception
作为声明,并将名称为exception.php
的文件放在classes/martbooks
中。这遵循Kohana的风格。
扩展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
的{{1}}。
我反对在构造函数中使用__construct()
级别进行日志记录的唯一反对意见是它假定每个异常都是应用程序级错误,某些异常类型可能也是如此,但也可以使用它表示其他意义。异常的确切含义应留给异常处理块。
答案 1 :(得分:1)
要添加日志消息,您只需要一行; Kohana::$log->add($level, $message[, $values])
see the api
除此之外,我认为这不是一个有效的解决方案。您最好创建自己的异常处理程序,正如您在this page
的userguide上看到的那样