tp6自动选择模式输出日志dumps函数封装


tp的dump助手函数很强大,但是在cli的时候,经过下述缓冲区处理,主要是var_dump函数会出现中文乱码:

ob_start();
var_dump(...$vars);
$output = ob_get_clean();

下述封装了dumps函数,能够自动选择模式输出

/**
 * 自动选择模式输出日志dumps([1,2,3],'debug')
 * @param $content 输出内容mixture
 * @param null $level 默认为空(且非生产环节)则调用dump输出,传入日志级别则写日志
 * @return bool
 */
function dumps($output, $logLevel=null)
{
    $env = env('APP_ENV', 'prod');
    //debug, info, notice, warning, error, critical, alert, emergency
    $prodLevel = ['notice', 'warning', 'error', 'critical', 'alert', 'emergency'];
    if (in_array($logLevel, $prodLevel)){
        if ($env === 'prod' and !in_array($logLevel, ['debug', 'info'])){
            return false;//生产环境不记录debug和info日志
        }
        \think\facade\Log::write($output, $logLevel);//非生产环境记录若传level全部实时写log
        //return true;//此项返回可配置若不返回,则全部同时输出
    }elseif ($logLevel !== null){
        \think\facade\Log::error(sprintf('dumps函数第2参数传入错误的类型:%s',$logLevel));
    }

    if (PHP_SAPI == 'cli') {
        //cli输出不能够使用dump函数
        $output = preg_replace('/\]\=\>\n(\s+)/m', '] => ', $output);
        echo PHP_EOL . $output . PHP_EOL;
        return true;
    }
    dump($output);//tp助手函数
}

原文链接:https://blog.yongit.com/note/138972.html