> For the complete documentation index, see [llms.txt](https://doc.kaliphp.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://doc.kaliphp.com/debug.md).

# 调试

框架中有两种调试方式，一种是在页面控制台中输出的调试，方便用户对应网页调试。

另一种则是和其他框架一样，在日志中调试

### 控制台调试

KaliPHP 的一大特色既是这控制台调试方式，通过Chrome logger扩展，用户可以调试自己想要的数据，同时也不会对当前的页面结构产生影响。

调试的开关在`/web/index.php`里

扩展安装地址：<https://chrome.google.com/extensions/detail/noaneddfkdjfnfdakjjmocngnfkfehhd>

```
// console调试开关，关闭后控制台不会输出内容
defined('SYS_CONSOLE') or define('SYS_CONSOLE', true);
```

控制台调试的方式，同步异步都可以调试，因为调试信息是在http header信息里面，所以异步ajax的请求也会把调试信息输出在控制台里了，并不会污染json数据。

调试方式很简单，全局可以调用`log::info($message, $context)`，另外还有warn，error，debug等

第一个参数为想要调试的内容，同时也支持数组，Object类的输出。第二个参数为信息扩展，一般是信息分类，比如：SQL Error、IP地址、当前调用方法\_\_method\_\_，然后通过grep即可进行日志筛选查询：`grep -rIn "SQL Query" debug.log`

`log::info()`消息 输出

`log::notice()`提示 输出

`log::debug()`调试 输出

`log::warning()`警告 输出

`log::error()`异常 输出

下面是一个简单例子，和控制台的输出结果。结果会因为浏览器不一样而样式不同，效果上是一样的。

```
// 以下代码全局都可以使用
log::info('order start');
// 可以传数组，也可以传对象，对象会先转化为数组，再转化为json字符串
log::notice(array('cc'=>'dd'));                     
// debug里面很多信息，SQL Query分类一下，日志查询可以用 grep -rIn "SQL Query" debug.log
log::debug('SELECT * FROM `user`', 'SQL Query');    
log::error('this is a error');
log::warning('ss');
```

另外`log`调试类中还支持time，memory的输出，信息会输出到debug.log，可以使用其对代码性能做优化。

```
// 开始结尾处加上时间 和 memory 就可以获取中间程序消耗的性能了
log::time('start-time');
log::memory('start-memory');
log::debug('do something');
log::time('end-time');
log::memory('end-memory');
```

### 日志调试

平台的日志目录在`data/log/`，请确保该目录有`写权限`

记录会生成在`{错误类型}.log`文件中，如：`info.log`、`debug.log`、`warn.log`、`error.log`

系统程序错误也都会在error日志中显示，如页面出现500时可在错误日志中查看定位
