zoukankan      html  css  js  c++  java
  • Yii2 捕获错误日志

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

    Yii2 web应用

    1 配置如下

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

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


    2 ErrorContrller代码示例

    <?php
    
    namespace blogcontrollers;
    
    use commonserviceapplogApplogService;
    use Yii;
    
    class ErrorController extends yiiwebController{
        public $enableCsrfValidation = false;
        public function actionError() {
    
            $code = 404;
            $msg = 'Page Not Found';
    
            $error = Yii::$app->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' => 'consolecontrollersErrorController'
        ]
    ]

    2 ErrorController代码示例

    <?php
    
    namespace consolecontrollers;;
    
    use commonserviceapplogApplogService;
    use Yii;
    use yiiaseErrorException;
    use yiiaseUserException;
    use yiihelpersConsole;
    use yiiconsoleException;
    
    
    class ErrorController extends yiiaseErrorHandler{
    
        protected function renderException($exception){
            if ($exception instanceof Exception && ($exception instanceof UserException || !YII_DEBUG)) {
                $message = $this->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]) //. "
    "
                    . "
    
    in " . dirname($exception->getFile()) . DIRECTORY_SEPARATOR . $this->formatMessage(basename($exception->getFile()), [Console::BOLD])
                    . ':' . $this->formatMessage($exception->getLine(), [Console::BOLD, Console::FG_YELLOW]) . "
    ";
                if ($exception instanceof yiidbException && !empty($exception->errorInfo)) {
                    $message .= "
    " . $this->formatMessage("Error Info:
    ", [Console::BOLD]) . print_r($exception->errorInfo, true);
                }
                $message .= "
    " . $this->formatMessage("Stack trace:
    ", [Console::BOLD]) . $exception->getTraceAsString();
            }
    
            ApplogService::add(Yii::$app->id,$message);//存到数据库中
    
            if (PHP_SAPI === 'cli') {
                Console::stderr($message . "
    ");
            } else {
                echo $message . "
    ";
            }
        }
    
        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 yiiconsoleController && Yii::$app->controller->isColorEnabled($stream)
                || Yii::$app instanceof yiiconsoleApplication && Console::streamSupportsAnsiColors($stream)) {
                $message = Console::ansiFormat($message, $format);
            }
            return $message;
        }
    }



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


    原文地址:Yii2 捕获错误日志
    标签:yii2   console   error   capture   

    智能推荐

  • 相关阅读:
    springMVC的请求方法中处理多个mybatis方法,到某个方法中断了:BindingException:has an unsupported return type
    mybatis执行删除的restful操作的时候:Access to the specified resource has been forbidden.
    Mybatis整合spring的时候用log4j输出sql信息的debug设置
    mybatis整合ss的时候,无法autowire使用mapper的自动注入,找不到bean:NoSuchBeanDefinitionException
    springMVC提交更新:e JSPs only permit GET POST or HEAD
    ssh整合context:component-scan包名写了*号:Failed to parse configuration class [org.springframework.cache.aspectj.AspectJJCacheConfiguration]
    springMVC:java.io.FileNotFoundException: Could not open ServletContext resource
    springmvc提交表单,格式问题:The request sent by the client was syntactically incorrect.
    idea在处理spring国际化解决中文乱码,properties的格式:native-to-ascii
    REST删除操作
  • 原文地址:https://www.cnblogs.com/apanly/p/5558918.html
Copyright © 2011-2022 走看看