PHPackages                             aben1188/socketlog - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. aben1188/socketlog

ActiveLibrary[API Development](/categories/api)

aben1188/socketlog
==================

debug tool for api , ajax,wechat ,v2.2

2.2.0(10y ago)014MITPHPPHP &gt;=5.4.0

Since Dec 8Pushed 7y ago1 watchersCompare

[ Source](https://github.com/aben1188/SocketLog)[ Packagist](https://packagist.org/packages/aben1188/socketlog)[ RSS](/packages/aben1188-socketlog/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (2)Used By (0)

\#说明

SocketLog适合Ajax调试和API调试， 举一个常见的场景，用SocketLog来做微信调试， 我们在做微信API开发的时候，如果API有bug，微信只提示“改公众账号暂时无法提供服务，请稍候再试” ，我们根本不知道API出来什么问题。 有了SocketLog就不一样了， 我们可以知道微信给API传递了哪些参数， 程序有错误我们也能看见错误信息(下方有张图片，可能加载慢，请耐心等待一下)

[![微信调试](https://raw.githubusercontent.com/luofei614/SocketLog/master/screenshots/weixin.png)](https://raw.githubusercontent.com/luofei614/SocketLog/master/screenshots/weixin.png)

- 正在运行的API有bug，不能var\_dump进行调试，因为会影响client的调用。 将日志写到文件，查看也不方便，特别是带调用栈或大数据结构的文件日志，查看日志十分困难。 这时候用SocketLog最好，SocketLog通过websocket将调试日志打印到浏览器的console中。你还可以用它来分析开源程序，分析SQL性能，结合taint分析程序漏洞。
- Chrome插件安装：  （如果不能正常访问这个页面，你可以用下面手动安装的方法进行安装）
- 目录结构：
- chrome 目录是 chrome插件的源代码
- chrome.crx 文件是chrome插件的安装包， 如果你无法从chrome应用商店安装，可进行手动安装， 浏览器地址栏输入并打开： chrome://extensions/ ，然后将chrome.crx拖入即可安装。
- php 目录下的SocketLog.class.php是发送日志的类库,我们在发送日志的时候，需要载入这个类库然后调用函数slog即可。
- 效果展示： 我们在浏览网站的时候在浏览器console中就知道程序做了什么，这对于二次开发产品十分有用。 下面效果图在console中打印出浏览discuz程序时，执行了哪些sql语句， 以及执行sql语句的调用栈。程序的warning，notice等错误信息也可以打到console中。 [![enter image description here](https://github.com/luofei614/SocketLog/raw/master/screenshots/discuz.png)](https://github.com/luofei614/SocketLog/raw/master/screenshots/discuz.png)

\#使用方法

- 首先，请在chrome浏览器上安装好插件。
- 安装服务端`npm install -g socketlog-server` , 运行命令 `socketlog-server` 即可启动服务。 将会在本地起一个websocket服务 ，监听端口是1229 。 如果想服务后台运行： `socketlog-server > /dev/null &` 我们提供公用的服务端，需要去申请client\_id :
- 如果你的服务器有防火墙，请开启1229和1116两个端口，这两个端口是socketlog要使用的。
- 在自己的程序中发送日志：

    ```

    ```
- 用slog函数发送日志， 支持多种日志类型：

    ```
     slog('msg','log');  //一般日志
     slog('msg','error'); //错误日志
     slog('msg','info'); //信息日志
     slog('msg','warn'); //警告日志
     slog('msg','trace');// 输入日志同时会打出调用栈
     slog('msg','alert');//将日志以alert方式弹出
     slog('msg','log','color:red;font-size:20px;');//自定义日志的样式，第三个参数为css样式

    ```
- 通过上面例子可以看出， slog函数支持三个参数：
- 第一个参数是日志内容，日志内容不光能支持字符串哟，大家如果传递数组,对象等一样可以打印到console中。
- 第二个参数是日志类型，可选，如果没有指定日志类型默认类型为log， 第三个参数是自定样式，在这里写上你自定义css样式即可。

\##配置

- 在载入slog.function.php文件后，还可以对SocketLog进行一些配置。
- 例如：我们如果想将程序的报错信息页输出到console，可以配置

    ```

    ```
- 配置SocketLog也是用slog函数， 第一个参数传递配置项的数组，第二个参数设置为config
- 还支持其他配置项

    ```

    ```
- optimize 参数如果设置为true， 可以在日志中看见利于优化参数，如：`[运行时间：0.081346035003662s][吞吐率：12.29req/s][内存消耗：346,910.45kb]`
- show\_included\_files 设置为true，能显示出程序运行时加载了哪些文件，比如我们在分析开源程序时，如果不知道模板文件在那里， 往往看一下加载文件列表就知道模板文件在哪里了。
- error\_handler 设置为true，能接管报错，将错误信息显示到浏览器console， 在开发程序时notice报错能让我们快速发现bug，但是有些notice报错是不可避免的，如果让他们显示在页面中会影响网页的正常布局，那么就设置error\_handler,让它显示在浏览器console中吧。 另外此功能结合php taint也是极佳的。 taint能自动检测出xss，sql注入， 如果只用php taint， 它warning报错只告诉了变量输出的地方，并不知道变量在那里赋值、怎么传递。通过SocketLog， 能看到调用栈，轻松对有问题变量进行跟踪。 更多taint的信息：
- 设置client\_id: 在chrome浏览器中，可以设置插件的Client\_ID ，Client\_ID是你任意指定的字符串。 [![enter image description here](https://github.com/luofei614/SocketLog/raw/master/screenshots/socketlog.png)](https://github.com/luofei614/SocketLog/raw/master/screenshots/socketlog.png)
- 设置client\_id后能实现以下功能：
- 1，配置allow\_client\_ids 配置项，让指定的浏览器才能获得日志，这样就可以把调试代码带上线。 普通用户访问不会触发调试，不会发送日志。 开发人员访问就能看的调试日志， 这样利于找线上bug。 Client\_ID 建议设置为姓名拼命加上随机字符串，这样如果有员工离职可以将其对应的client\_id从配置项allow\_client\_ids中移除。 client\_id除了姓名拼音，加上随机字符串的目的，以防别人根据你公司员工姓名猜测出client\_id,获取线上的调试日志。
- 设置allow\_client\_ids示例代码：

    ```
      slog(array(
      'allow_client_ids'=>array('luofei_zfH5NbLn','easy_DJq0z80H')
      ),'set_config')

    ```
- 2, 设置force\_client\_id配置项，让后台脚本也能输出日志到chrome。 网站有可能用了队列，一些业务逻辑通过后台脚本处理， 如果后台脚本需要调试，你也可以将日志打印到浏览器的console中， 当然后台脚本不和浏览器接触，不知道当前触发程序的是哪个浏览器，所以我们需要强制将日志打印到指定client\_id的浏览器上面。 我们在后台脚本中使用SocketLog时设置force\_client\_id 配置项指定要强制输出浏览器的client\_id 即可。
- 示例代码:

    ```
