预警能够理解成咱们平常生活中的体检,每一个人无论是富贵,仍是贫穷,有一个健康的身体才是事业和生活的基础。php
项目的健康咱们形象比喻成“1”,项目的N多子功能/子模块,好比登陆模块、注册模块等都是“1”后面的“0”,若是项目都出问题了(好比 Http Status Code 502, 页面或者接口响应慢),至关于前面的“1”已经不存在了,即便后面再多的“0”也没有任何意义。html
从医学的名词来表述,包括了三个方面:redis
关于 Asf 框架的入门教程,请看这里 >>> Get Start
关于 Asf 框架支持的配置项及配置详情,请看这里 >>> Get Startapi
Asf PHP扩展框架已经内置了一套预警机制,预警范围包括了两个方面,每个方面又包括两种不一样的预警处理方法。app
PHP脚本执行异常预警框架
Fatal Error | Warning | Notice | Strict | Deprecated | Unknown Error |
---|---|---|---|---|---|
E_PARSE | E_WARNING | E_NOTICE | E_STRICT | E_DEPRECATED | E_OTHERS |
E_ERROR | E_USER_WARNING | E_USER_NOTICE | - | - | - |
E_CORE_ERROR | E_CORE_WARNING | - | - | - | - |
E_COMPILE_ERROR | E_COMPILE_WARNING | - | - | - | - |
E_USER_ERROR | E_RECOVERABLE_ERROR | - | - | - | - |
PHP脚本执行时间耗时预警 (非CLI模式下)curl
配置项 | 类型 | 默认值 (秒) | 含义 |
---|---|---|---|
asf.dispathcer.timeout.max_script_time | double | 1.0 | 脚本超时预警 |
asf.dispathcer.timeout.max_db_time | double | 0.1 | SQL超时预警 |
asf.dispathcer.timeout.max_cache_time | double | 0.1 | NoSQL超时预警 |
asf.dispathcer.timeout.max_curl_time | double | 0.1 | CURL超时预警 |
本地日志记录方案,支持 Log Buffer,性能指标请看这里 >>> Get Start函数
日志格式规范请参考这里 >>> Get Start性能
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php <?php use Asf\Application as App; $configs = array( 'asf' => array( 'root_path' => dirname(__DIR__) . '/apps', 'log_path' => '/data/logs', /* 日志保存目录,写入权限 */ 'dispatcher' => [ 'log' => ['err' => 1] /* 开启 */ ] ) ); $app = new App($configs); $app->run();
[dongshuang@box3 /data/logs]$ tailf Asf_Err_Log 2019-02-22 16:01:11 Asia/Shanghai | NOTICE | 28984 | Notice: Undefined variable: b in /data/www/box3.cn/apps/Bootstrap.php on line 21 2019-02-22 16:01:11 Asia/Shanghai | WARNING | 31486 | Warning: include(test.php): failed to open stream: No such file or directory in /data/www/box3.cn/apps/Bootstrap.php on line 20 2019-02-22 16:02:24 Asia/Shanghai | ERROR | 4137 | Fatal Error: Asf\Application::run() No method listaaction in DeviceService in /data/www/box3.cn/public/index.php on line 23 Stack trace: ## settled_uri = /v1/device/lista #0 /data/www/box3.cn/public/index.php(23): Asf\Application->run() #1 {main}
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php <?php use Asf\Application as App; $configs = array( 'asf' => array( 'root_path' => dirname(__DIR__) . '/apps', 'log_path' => '/data/logs', /* 日志保存目录,写入权限 */ 'dispatcher' => [ 'log' => ['timeout' => 1] /* 开启 */ ] ) ); $app = new App($configs); $app->run();
[dongshuang@box3 /data/logs]$ tailf Asf_Timeout_Log 2019-02-25 09:06:48 UTC | INFO | 26026 | 127.0.0.1:6379 Redis::set(110) executing too slow 0.201406 sec 2019-02-25 09:06:48 UTC | INFO | 26026 | 127.0.0.1:6379 Redis::get(111) executing too slow 0.201349 sec 2019-02-25 09:06:48 UTC | INFO | 26026 | /index/redis executing too slow 1.008510 sec
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php <?php use Asf\Application as App; function myErrorHandler($errno, $errstr, $errfile, $errline) { var_dump($errno, $errstr, $errfile, $errline); } $configs = array( 'asf' => array( 'root_path' => dirname(__DIR__) . '/apps', ) ); $app = new App($configs); $app->setErrorHandler('myErrorHandler'); $app->run();
int(999) string(33) "Fatal Error: Class 'ck' not found" string(53) "/data/www/box3.cn/apps/api/services/Index.php" int(42)
[dongshuang@box3 /data/www/box3.cn/public]$ cat index.php <?php use Asf\Application as App; function myTimeoutHandler($errno, $errstr) { var_dump($errno, $errstr); } $configs = array( 'asf' => array( 'root_path' => dirname(__DIR__) . '/apps', ) ); $app = new App($configs); $app->setTimeoutHandler('myTimeoutHandler'); $app->run();
int(976) string(44) "/index/redis executing too slow 0.508643 sec"
感谢你们的阅读,但愿能给你们带来帮助,若是使用中有疑问请联系咱们,固然了咱们也能够聊点更好玩的 ^_^url