关于异常的日志记录

网站里大都会经常抛出404的异常,

有些404是系统抛出的,比如,当用户输入一个错误url地址

有些404是管理员自己抛出的,比如,这个页面已经不允许用户访问了。

现在问题是,系统抛出的问题,需要日志记录,而管理员手动抛出的异常,不需要日志记录。

请问怎么解决好,谢谢。

需要中心拦截点 最好实现自己的错误/异常处理器 http://www.yiiframework.com/doc/api/1.1/CApplication#getErrorHandler-detail

你需要仔细阅读http协议的状态码部分 比如3系码可能有链接失效 暂时移动/永久移动 5系服务器内部异常 区分用户错误跟服务器错误 这个一般用扩展异常类就可以解决 不同情况定义不同状态码:

class MyException extends CException/CHttpException{

      public &#036;errorCode;  //可以先弄一些枚举值 当然可能很多(几百也有可能 <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/laugh.gif' class='bbc_emoticon' alt=':lol:' /> )

}

然后在异常处理器组件中统一处理 区分异常、错误异常(CErrorException),自定义异常类型 instanceof 就可以做到 然后如果是自定义异常 可以提取状态码 根据状态码 看是否进日志(日志类可以自己写一个 也可以用yii自带的)

yii里的抛出异常:见CApplication::handleException,默认都会启用log记录的。

我目前只能扩展异常类

直接在构造方法里,将log的enable关掉




class ECHttpException extends CHttpException {

	public function __construct($status,$message=null,$code=0) {

		foreach(Yii::app()->log->getRoutes() as $route)

			$route->enabled=false;

		parent::__construct($status, $message, $code);

	}

}