博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Yii2 捕获错误日志
阅读量:7121 次
发布时间:2019-06-28

本文共 3129 字,大约阅读时间需要 10 分钟。

  hot3.png

在技术开发中,捕获程序框架错误,是非常必要的一件事情,我们公司使用Yii2框架,简单说下Yii2的错误捕获处理

Yii2 web应用

1 配置如下

  其中errorHandler就是错误处理配置,执行ErrorController的actionError

'components' => [    "urlManager" => require (__DIR__ . '/router.php'),    'errorHandler' => [        'errorAction' => 'error/error',    ],]

2 ErrorContrller代码示例

errorHandler->exception;        if ($error) {            $code = $error->getCode();            $msg = $error->getMessage();            $file = $error->getFile();            $line = $error->getLine();            $err_msg = $msg . " [file: {$file}][line: {$line}][err code:$code.][url:{$_SERVER['REQUEST_URI']}][post:".http_build_query($_POST)."]";            ApplogService::add(Yii::$app->id,$err_msg);//我这里存入数据库        }            }}

命令行应用

1 配置如下,配置指定使用ErrorController(命令行应用和web应用还是有区别的)

'components' => [    "urlManager" => require (__DIR__ . '/router.php'),    'errorHandler' => [        'class' => 'console\controllers\ErrorController'    ]]

2 ErrorController代码示例

formatMessage($exception->getName() . ': ') . $exception->getMessage();        } else{            if ($exception instanceof Exception) {                $message = $this->formatMessage("Exception ({$exception->getName()})");            } elseif ($exception instanceof ErrorException) {                $message = $this->formatMessage($exception->getName());            } else {                $message = $this->formatMessage('Exception');            }            $message .= $this->formatMessage(" '" . get_class($exception) . "'", [Console::BOLD, Console::FG_BLUE])                . " with message " . $this->formatMessage("'{$exception->getMessage()}'", [Console::BOLD]) //. "\n"                . "\n\nin " . dirname($exception->getFile()) . DIRECTORY_SEPARATOR . $this->formatMessage(basename($exception->getFile()), [Console::BOLD])                . ':' . $this->formatMessage($exception->getLine(), [Console::BOLD, Console::FG_YELLOW]) . "\n";            if ($exception instanceof \yii\db\Exception && !empty($exception->errorInfo)) {                $message .= "\n" . $this->formatMessage("Error Info:\n", [Console::BOLD]) . print_r($exception->errorInfo, true);            }            $message .= "\n" . $this->formatMessage("Stack trace:\n", [Console::BOLD]) . $exception->getTraceAsString();        }        ApplogService::add(Yii::$app->id,$message);//存到数据库中        if (PHP_SAPI === 'cli') {            Console::stderr($message . "\n");        } else {            echo $message . "\n";        }    }    protected function formatMessage($message, $format = [Console::FG_RED, Console::BOLD]){        $stream = (PHP_SAPI === 'cli') ? \STDERR : \STDOUT;        // try controller first to allow check for --color switch        if (Yii::$app->controller instanceof \yii\console\Controller && Yii::$app->controller->isColorEnabled($stream)            || Yii::$app instanceof \yii\console\Application && Console::streamSupportsAnsiColors($stream)) {            $message = Console::ansiFormat($message, $format);        }        return $message;    }}

对比下 命令行应用 和 web应用,ErrorController继承的不一样,并且实现的方法也不一样的

原文地址:
标签:            

智能推荐

转载于:https://my.oschina.net/54php/blog/687100

你可能感兴趣的文章
JavaScript 开发的技巧
查看>>
mac 常用命令
查看>>
001——搭建OpenCV实验环境
查看>>
Windows Server 2008更改SID
查看>>
使用AOP的方式监测方法执行耗时
查看>>
cryptopunks的代码解释
查看>>
Linux中查看你的用户是否为root用户
查看>>
正则表达式
查看>>
js 常用的功能
查看>>
C语言和sh脚本的杂交代码
查看>>
oracle常用加解密函数
查看>>
linux中redis安装
查看>>
2018-2019 Exp3 免杀原理与实践
查看>>
linux install mysql
查看>>
CF871D Paths
查看>>
DataTable和DataSet什么区别
查看>>
【翻译】Native App和Web App之争纯属扯淡
查看>>
移植cjson到windows下编译
查看>>
No Try No Catch
查看>>
8.JSP基础
查看>>