微信调试、API调试和AJAX的调试的工具,能将日志通过WebSocket输

说明

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

使用方法首先,请在chrome浏览器上安装好插件。然后,启用Websocket服务,该服务是nodejs写的,在server目录下,请先确保你的环境已经安装nodejs, 启动Websocket服务运行命令node server/index.js, 将会在本地起一个websocket服务 ,监听端口是1229 。 如果想服务后台运行:nohup node server/index.js > /dev/null &

在自己的程序中发送日志:

<?phpinclude ‘./php/SocketLog.class.php’;slog(‘hello world’);?>

用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样式即可。配置在载入SocketLog.class.php文件后,还可以对SocketLog进行一些配置。

例如:我们如果想将程序的报错信息页输出到console,可以配置

<?phpinclude ‘./php/SocketLog.class.php’;slog(array(‘error_handler’=>true),’set_config’);echo notice;//制造一个notice报错slog(‘这里是输出的一般日志’);?>配置SocketLog也是用slog函数, 第一个参数传递配置项的数组,第二个参数设置为set_config

还支持其他配置项

<?phpinclude ‘./php/SocketLog.class.php’;slog(array(‘host’=>’localhost’,//websocket服务器地址,默认localhost’port’=>’1229′,//websocket服务器端口,默认端口是1229’optimize’=>false,//是否显示利于优化的参数,如果运行时间,消耗内存等,默认为false’show_included_files’=>false,//是否显示本次程序运行加载了哪些文件,默认为false’error_handler’=>false,//是否接管程序错误,将程序错误显示在console中,默认为false’force_client_id’=>”,//日志强制记录到配置的client_id,默认为空’allow_client_ids’=>array()////限制允许读取日志的client_id,默认为空,表示所有人都可以获得日志。),’set_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是你任意指定的字符串。

设置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 即可。

示例代码:

<?phpinclude ‘./php/SocketLog.class.php’;slog(array(‘force_client_id’=>’luofei_zfH5NbLn’),’set_config’);slog(‘test’); `对数据库进行调试SocketLog还能对sql语句进行调试,自动对sql语句进行explain分析,显示出有性能问题的sql语句。 如下图所示。

图中显示出了三条sql语句 , 第一条sql语句字体较大,是因为它又性能问题, 在sql语句的后台已经标注Using filesort。 我们还可以点击某个sql语句看到sql执行的调用栈,清楚的知道sql语句是如何被执行的,方便我们分析程序、方便做开源程序的二次开发。图中第三条sql语句为被点开的状态。每天告诉自己一次,『我真的很不错』

微信调试、API调试和AJAX的调试的工具,能将日志通过WebSocket输

相关文章:

你感兴趣的文章:

标签云: