背景

当程序中出现不可预期的错误,比如说除0异常,yii会给我们扔出这个异常信息,由于现在都是读写分离,客户端调你的api,都是协商好的数据格式,如果业务方没有兼容你的异常返回,客户端出现异常错误,影响也挺恶心。

再者,写些脚本的时候,出现不可预期的异常没有记到日志中,对于我们排查错误也是大大的麻烦。好在,yii提供错误处理,看看官方文档:错误处理

默认的错误处理是 (web)https://www.yiichina.com/doc/api/2.0/yii-web-errorhandler (console)https://www.yiichina.com/doc/api/2.0/yii-console-errorhandler,

通过重写renderException方法,就可以达到自定义的错误输出。

web错误处理

web.php 配置:

  1. ...
  2. 'errorHandler' => [
  3. 'class' => 'app\controllers\ErrorController',
  4. 'errorAction' => 'site/error',
  5. ],
  6. ...

ErrorController.php

  1. <?php
  2. namespace app\controllers;
  3. use app\modules\Common;
  4. use Yii;
  5. class ErrorController extends \yii\web\ErrorHandler{
  6. protected function renderException($exception){
  7. //todo 业务处理异常
  8. //if( Yii::$app->request->getIsPost() && !Yii::$app->request->get('fullerror')){
  9. // return Common::echoJson(500, $exception->getMessage());
  10. //}
  11. parent::renderException($exception);
  12. }
  13. }

console错误处理

console.php

  1. ...
  2. 'errorHandler' => [
  3. 'class' => 'app\commands\ErrorController'
  4. ],

ErrorController.php

  1. <?php
  2. namespace app\commands;
  3. use Yii;
  4. use yii\helpers\FileHelper;
  5. use yii\log\FileTarget;
  6. use yii\log\Logger;
  7. class ErrorController extends \yii\base\ErrorHandler{
  8. protected function renderException($exception){
  9. //业务处理异常
  10. $errMsg = "文件位置:{$exception->getFile()} 所在行:{$exception->getLine()}\n". "错误:".$exception->getMessage();
  11. self::writeLog('sys_exception.log',date('Y-m-d H:i:s') . "{$errMsg}\n");
  12. }
  13. public static function writeLog($fileName, $message,$categories='')
  14. {
  15. $logPath = Yii::$app->getRuntimePath() . '/logs/' . date("Ymd") . "/";
  16. FileHelper::createDirectory($logPath);
  17. $file = new FileTarget();
  18. $file->logFile = $logPath . $fileName;
  19. $file->messages[] = [$message, Logger::LEVEL_INFO, $categories, time()];
  20. $file->export();
  21. }
  22. }

Yii错误异常处理的更多相关文章

  1. PHP7语法知识(三):时间与日期、表单、类与对象、正则表达式、错误异常处理、图像处理

    时间与日期 一.设置时区 1.在配置文件中设置: 2.通过data_default_timezone_set函数在文件中设置: 二.获取当前时间 三.常用时间处理方法 1.格式化时间显示: 2.计算时 ...

  2. 【六】php 错误异常处理

    错误异常处理 概念:代码在try代码块被调用执行,catch代码块捕获异常 异常需要手动抛出 throw new Exception (‘message’,code) throw将出发异常处理机制 在 ...

  3. EBS OAF开发中的错误/异常处理(ErrorHandling) (转)

    原文地址 EBS OAF开发中的错误/异常处理(ErrorHandling) EBS OAF开发中的错误/异常处理(ErrorHandling) (版权声明,本人原创或者翻译的文章如需转载,如转载用于 ...

  4. 2017.10.28 针对Java Web应用中错误异常处理方法的运用

    针对Java Web应用中错误异常处理方法的运用 在javaweb中其异常都需要对Checked Exception之下的Exception进行继承,并且有选择地对发生的错误和异常进行处理.Java同 ...

  5. YII Framework学习教程-YII的异常处理

    异常无处不在,作为程序员,活着就是为了创造这些异常,然后修复这些异常而存在的.YII框架封装了PHP的异常,让异常处理起来更简单. 使用 YII处理错误和异常的配置方法: 你可以在入口文件中定义YII ...

  6. YII 错误 SQLSTATE[HY000] [2002] No such file or directory

    在使用yii的yii\db\Connnection时发生错误 <?php namespace app\controllers; use yii\web\Controller; use yii\d ...

  7. 从C#到Objective-C,循序渐进学习苹果开发(4)--代码块(block)和错误异常处理的理解

    本随笔系列主要介绍从一个Windows平台从事C#开发到Mac平台苹果开发的一系列感想和体验历程,本系列文章是在起步阶段逐步积累的,希望带给大家更好,更真实的转换历程体验.本文继续上一篇随笔<从 ...

  8. python学习第十八天 --错误&异常处理

    这一章节主要讲解python的错误和异常处理 什么是错误和异常?及其区别? 错误: 1.语法错误:代码不符合解释器或者编译器语法. 2.逻辑错误:不完整或者不合法输入或者计算出现问题.   异常:执行 ...

  9. VB.NET之错误异常处理

    相对于VB而言,VB.NET中引入了很多特色.当中最吸引我的就是引入了结构化异常处理. 尽管VB.NET仍然支持OnError Goto类型的异常处理,可是这样做并非非常好.相比而言,结构化异常处理更 ...

随机推荐

  1. P1197 [JSOI2008]星球大战——链式前向星+并查集

    https://www.luogu.org/problem/P1197 这道题算是关闭农场的加强版吧,数据有点大,矩阵存不下: 也是记录删点操作,从后往前加边: 先将每个点都算成一个连通块,然后每连一 ...

  2. 在win10环境下配置spark和scala

    在这里配置的是在命令行下运行spark的环境用来学习,最后结果如下,可运行简单的代码. 0.jdk.scala和spark的版本问题 有关版本如官网所示,我想要强调的是spark至今并不支持jdk11 ...

  3. Flask上下文源码分析(二)

    前面第一篇主要记录了Flask框架,从http请求发起,到返回响应,发生在server和app直接的过程. 里面有说到,Flask框架有设计了两种上下文,即应用上下文和请求上下文 官方文档里是说先理解 ...

  4. git 和conding.net 超详细超简单安装

    在做一下操作前,希望你能知道 1.什么是git? 可以参考https://blog.csdn.net/a909301740/article/details/81636662 如果还想多了解一下还可以参 ...

  5. js修改Switchery复选框的状态

    声明一个switchery插件,绑定到一个input上 js代码 var mySwitch = new Switchery($('#blacklist')[0], { size:"small ...

  6. Messagebox自定义计时关闭

    Messagebox自定义计时关闭 新建Winform项目WindowsFormsAppTESTMessageBoxAutoClose 主窗体代码 using System;using System. ...

  7. Random Projection

    Random Projection在k-means的应用   1. 随机投影 (Random Projection) 首先,这是一种降维方法.之前已经介绍过相对普遍的PCA的降维方法,这里介绍另一种降 ...

  8. Python日志库logging总结-可能是目前为止将logging库总结的最好的一篇文章

    在部署项目时,不可能直接将所有的信息都输出到控制台中,我们可以将这些信息记录到日志文件中,这样不仅方便我们查看程序运行时的情况,也可以在项目出现故障时根据运行时产生的日志快速定位问题出现的位置. 1. ...

  9. Bitmap之extractAlpha函数抽取alpha值

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  10. JavaScript的深拷贝

    javaScript的拷贝有浅拷贝和深拷贝.拷贝我们一般拷贝对象,获取对象的内容(字段.函数)都给复制一遍 浅拷贝:一般只是简单的赋值 //浅拷贝 var obj1={name:"cat&q ...