出现内部错误,代码有问题,我们需要解决。我们需要用日志记录下来。只有记录日志我们才能解决。
在开发环节中我们可以输出变量,或者断点调试找到问题原因。
但是在生产环境时,不能随意更改。我们排查生产环境的方法还是日志的方式。
我们需要在全局异常记录异常信息,在全局异常处理记录的日志是比较机械刻板的。按照同一模式输出,在需要的时候也可以输出一些有标示性的,相关变量。 但是比较有特征值的我们全局异常处理没法弄,但是我们全局异常处理可以记录下来,以便以后用。
TP5有写日志的方式,TP5会自动记录异常。但是这个机制并不是太好,开发环境对日志的依赖性是不大的,我们可以调试。日志在生产环境比较多。在框架中默认记录日志的格式是由他定义的,但是很多时候我们需要自己定义日志格式。
我们需要把默认写日志关掉。配置写日志实在config文件(tp5配置在两个地方config,和database这是数据库配置)
在config.php中找到日志设置
在base.php看到LOGO_PATH是RUNTIME_PATH,是在runtime文件夹的log文件夹
我们并不需要这么全的信息我们首先关闭日志记录信息(我们也可以不更改)
我们需要更改log地址,因为我们开发项目日志是不写在项目里,我们需要改目录
我们在index.php定义
他当前记录的日志信息,是用户传递的参数,如果用户查一个参数没找到,这种是不应该被记录下来的。否则会出现日志信息使无用的。因为这个不是代码错误,而是用户造成的。如果遇到恶意用户或者用户老是出错,那么日志文件就爆满了。
我们需要关闭自动记录,我们手动有选择来记录错误日志。关闭:在config.php中日志记录的吧File改成test。但是这种方式不好。效果达到了但是设置方式不直观。
如果是自定义的异常,不需要记录日志的,是在服务器内部错误记录日志。TP5提供了Log类用于记录日志,引入Log调用静态方法record(异常具体信息$e->getMessage(),级别如error)TP5已经把日志做了分类,在文档里有。
Log::init([ 'type' => 'File', 'path' => Log_PATH, 'level' => ['error'] ]);
在config文件下面,我们把默认初始化日志行为关闭掉了,所以没有初始化就不会生成。我们需要手动初始化一下。如上
'level' => ['error']
我们只记录异常以上的错误级别,调试信息就不放了。
JSON结构体非常适合我们客户端开发人员但是,不适合服务器人员调试错误。对客户端返回页面却是没什么意义。我们更希望看到错误信息的页面。我们需要一个开关,切换HTML和JSON
TP5本来就是返回错误页面,我们用了一个render覆盖了。我们只需要还原TP5默认行为,走自己的Render方法。我们只需要调用父类的render方法
return parent::render(Exception $e)
我们把配置需要把开关写到配置文件里。开发环境上线了之后整个产品是处于生产环境下面,一定不要打开调试模式。1 调试模式性能比生产环境差一些2 开了调试模式一些异常,调用接口就知道了app_debug上线后必须关闭。
所以我们只需要tp5 app_debug就行了
TP5提供config('app_debug')读取config下面的变量
或者config静态方法get Config::get(‘app_debug');
配置文件一般不会去写他的,我们一般是读取信息。如果想去记录某一个变量具体值,不应该考虑配置文件记录,而是应该把他记录到比如说数据库比如说redis缓存,或者TP5自带缓存中,实在不行就保存全局变量。这些地方用于记录数据状态,而不是把状态记录配置文件里。
另外自定义异常,显示JSON形式足够了,不用返回页面了。