Yii日志跳过404错误

Wiz*_*ard 8 php yii http-status-code-404

也许存在跳过404异常的解决方案?我不能将这些消息存储在日志文件中吗?

2015/04/09 12:28:52 [error] [exception.CHttpException.404] exception 'CHttpException' with message '?????????? ?????????? ?????? "offer/downloadOffer".' in /var/www/yii/framework/web/CWebApplication.php:286
Stack trace:
#0 /var/www/yii/framework/web/CWebApplication.php(141): CWebApplication->runController('offer/downloadO...')
#1 /var/www/yii/framework/base/CApplication.php(184): CWebApplication->processRequest()
#2 /var/www/LAP/www/index.php(16): CApplication->run()
#3 {main}
REQUEST_URI=/offer/downloadOffer
Run Code Online (Sandbox Code Playgroud)

Wiz*_*ard 8

解决方案是排除类别.

array(
'class' => 'CFileLogRoute',
'categories' => '!exception.CHttpException.404'
),
array(
'class' => 'CEmailLogRoute',
'categories' => '!exception.CHttpException.*'
),
Run Code Online (Sandbox Code Playgroud)

  • 您确定这是解决此问题的正确方法吗?请参阅我的 [答案](/sf/answers/3310123071/)。我想你会发现这将排除**所有**类别,因为没有一个匹配! (2认同)

jt_*_*_uk 7

对于 Yii 1.1,排除类别的正确方法是使用except键。根据接受的答案!categories键中添加 a实际上只会导致匹配以 a 开头的类别!。因此,虽然它可能看起来有效,但实际上您将抑制所有类别。查看filterAllCategories()源代码的功能 - 没有对!字符进行处理,仅针对*通配符:GitHub Source

!exception.CHttpException.404在接受的答案中尝试了这种方法,并认为我已经解决了隐藏 404 错误的问题,但后来我意识到这导致没有记录日志!

忽略类别的正确语法是:

array(
   'class' => 'CFileLogRoute',
   'except' => 'exception.CHttpException.404'
)
Run Code Online (Sandbox Code Playgroud)


Zha*_*uzz 6

对于 Yii 2.0,你可以像这样制作你的 config/main.php:

return [
    'components' => [
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                    'except' => ['yii\web\HttpException:404'],
                ],
            ],
        ],
    ],
];
Run Code Online (Sandbox Code Playgroud)