diff --git a/framework/logging/CLogRoute.php b/framework/logging/CLogRoute.php index 5835354537..4e7cad0896 100644 --- a/framework/logging/CLogRoute.php +++ b/framework/logging/CLogRoute.php @@ -40,6 +40,7 @@ abstract class CLogRoute extends CComponent public $levels=''; /** * @var string list of categories separated by comma or space. Defaults to empty, meaning all categories. + * Allows negating categories, use ! before a category name to not include it. */ public $categories=''; /** diff --git a/framework/logging/CLogger.php b/framework/logging/CLogger.php index 84e37645d7..1233a35d15 100644 --- a/framework/logging/CLogger.php +++ b/framework/logging/CLogger.php @@ -149,13 +149,20 @@ public function getLogs($levels='',$categories='') */ private function filterByCategory($value) { + $cat=strtolower($value[2]); + $negateOnly=true; foreach($this->_categories as $category) { - $cat=strtolower($value[2]); + if (substr($category, 0,1) === '!') + $category = substr($category,1); + else + $negateOnly = false; + if($cat===$category || (($c=rtrim($category,'.*'))!==$category && strpos($cat,$c)===0)) - return true; + return !$negateOnly; + } - return false; + return $negateOnly; } /**