【发布时间】:2017-02-14 07:49:34
【问题描述】:
在 index.php 中将 Yii2 设置为生产模式时 -
defined('YII_DEBUG') or define('YII_DEBUG', false);
defined('YII_ENV') or define('YII_ENV', 'prod')
我有一个记录器,它可以在生产模式下正确记录错误,并在用户页面上打印出适当的错误消息,但也会在通知中显示这些错误消息(不必要地杀死页面)。 所以,我在 index.php 中设置了 error_reporting -
error_reporting(E_ALL & ~E_NOTICE & ~E_STRICT);
但这完全阻止了 Yii2 捕获错误,因此它们不会被记录,并且在出现 error_reporting 允许的任何错误时呈现空白页面。它可以防止通知杀死页面,但是当我使用 error_reporting() 时日志会退出工作
有没有 Yii2 合适的方式来做这件事?以前有人遇到过这个问题吗?感谢所有尝试的解决方案。
错误日志配置——
$log['targets'][] = [
'class' => 'understeam\slack\LogTarget',
'exportInterval' => 1,
'levels' => ['error', 'warning'],
'except' => [
'yii\i18n*',
'yii\web\HttpException:404',
'yii\web\HttpException:403',
'yii\web\ForbiddenHttpException',
'yii\web\NotAcceptableHttpException',
'yii\base\InvalidRouteException'
],
];
以上是使用供应商包“understeam/yii2-slack”:“~0.3”
【问题讨论】:
-
您能详细介绍一下您的记录器吗?它使用set_error_handler(),是你自己的logger还是yii2内部的logger?我有类似的问题,可能这会有所帮助stackoverflow.com/questions/35522669/…
-
对不起,我没有包括那个。我将其添加到问题的底部。
-
好吧,看来你需要用你自己的实现替换 yii\web\ErrorHandler 或者使用 set_error_handler() 来注册你自己的函数,这会触发 Yii::warning() 向日志发送消息.
-
你错了,日志目标不向用户“显示”错误。你有什么奇怪的errorHandler组件配置吗?
-
@soju 同意,但是在处理遗留代码时,很难清理所有可能产生警告的内容,并更好地将它们发送到日志以进行调查而不中断页面生成。