【ThinkPHP6.x框架】(24)异常与日志处理

异常处理

        系统输出的异常信息比  PHP原生的要人性化的多,但需要开启调试模式。如果你想更改异常页面的样式、布局之类的,可以修改这个页面:

vendor/topthink/framework/src/tpl/think_exception.tpl

         如果你想要直接替换掉异常页面,换成别的,可以在  app.php中进行设置:

// 异常页面的模板文件
'exception_tmpl'  => app()->getThinkPath() . 'tpl/think_exception.tpl',

        系统的异常抛出是自动进行的,并不需要你手动抛出,但也支持手动:

throw new Exception('异常消息', 10086);

        我们可以使用try...catch对可能发生的异常进行手动捕获或抛出:

try {
    echo 0/0;
} catch (ErrorException $e) {
    echo '发生错误:'.$e->getMessage(); 
}

        我们可以抛出HTTP异常,所谓HTTP异常比如404错误,500错误之类:

throw new HttpException(404, '页面不存在');

        系统提供了一个助手函数  abort()方法简化  HTTP异常抛出:

abort(404, '页面不存在');

        如果系统关闭了调试模式,进入部署环境下,可以设置  HTTP错误页面,比如404:

'http_exception_template'   => [
    // 定义404错误的模板文件地址
    404 => \think\facade\App::getAppPath() . '404.html', 
]

日志处理

        日志处理的操作由  Log类完成,它记录着所有程序中运行的错误记录,在  config目录下的  log.php配置文件,用于设置日志信息。我们在  runtime目录下后一个  log文件夹,里面按照日期排好了每月的日志,使用  record()方法,记录一条测试日志:

Log::record('测试日志!');

        我们在  log日志文件夹里找到最新生成的日志,可以看到生成的日志信息,系统提供了不同日志级别,默认  info级别,从低到高排列如下。

debug/info/notice/warning/error/critical/alert/emergency/sql

        一般记录就是  info信息,我们也可以指定我们的信息级别:

Log::record('测试日志!', 'error');

        record()方法不是实时记录,需要等待程序完毕后决定是否写入日志,如果在写入方法后添加close()关闭写入,那么record()方法则不写入:

Log::close();

        系统还提供了一个  write()方法,进行时时写入,不理会其它限制:

Log::write('测试日志信息', 'error');

        系统发生异常后,会自动写入error日志,如果你想手动也可以:

try {
    echo 0/0;
} catch (ErrorException $e) {
    echo '发生错误:'.$e->getMessage(); 
    Log::record('被除数不得为零', 'error');
}

        对于各种日志级别,系统提供了一些快捷方式和助手函数,比如:

Log::error('错误日志!');         //Log::record('错误日志!', 'error')
Log::info('信息日志!');          //Log::record('信息日志!', 'info')
trace('错误日志!', 'error'); 
trace('信息日志!', 'info');

        系统默认并不记录HTTP异常,因为这种异常容易遭受攻击不断写入日志。除了系统提供的几种类型,也可以自己定义日志类型:

Log::diy('自定义日志');

        在配置文件log.php中,可以设置限定日志文件的级别,不属于的无法写入:

'level'  => ['error','info'],

        在配置文件log.php中,添加转换为json格式:

'json' => true

        使用::getLog()方法,可以获取写入到内存中的日志:

$logs = Log::getLog();
dump($logs);

        使用::clear()方法,可以清理掉内存中的日志:

Log::clear();

        在配置文件log.php中,可以设置以单独文件存储的方式:

'single'   => true,

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值