针对最新火狐浏览器50+以上版本的firebug协议,类似FirePHP,但是FirePHP已经很久不更新,并且对最新的浏览器也已失效。
这个在Firebug之上运行的扩展,结合一个服务器端的库,就可以让你的PHP代码向浏览器发送调试信息,该信息以HTTP响应头(HTTP headers)的方式编码。经过设置,你可以像在Firebug控制台调试JavaScript代码一样得到PHP脚本的警告和错误提示。下面我们来看看具体步骤。
直接上代码
import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
* @version V1.0
* @Description:直接输出服务器端调试日志到控制台,简易版本。
* @date 2017/6/13 16:51
*/
public class DebugTool {
public final String VERSION = "2.0.j1";
public final String HEADER_NAME = "X-ChromeLogger-Data";
protected Map<String, Object> console = new HashMap<>();
private String response="";
public DebugTool() {
console.put("version", VERSION);
console.put("columns", new String[]{"log", "backtrace", "type"});
console.put("rows", new ArrayList<Objects>());
console.put("request_uri", this.getClass().getName());
}
public DebugTool(Class cls) {
this();
console.put("request_uri", cls.getName());
}
public void log(Object o) {
log(o,"");
}
public void info(Object o) {
log(o,"info");
}
public void warn(Object o) {
log(o,"warn");
}
public void error(Object o) {
log(o,"error");
}
public void log(Object o,String type) {
Object[] info;
if(o instanceof Map){
info = new Object[]{o};
}else {
info = new Object[]{o.toString()};
}
Object[] obj = new Object[]{info, console.get("request_uri"), type};
ArrayList<Object> rows = (ArrayList<Object>) console.get("rows");
rows.add(obj);
console.put("rows", rows);
}
public String getResponse(){
String json = JSON.toJSONString(console);
json = Base64.encodeToString(json);
return json;
}
}
使用方法:
DebugTool debug=new DebugTool(this.getClass());
tool.log("hello 八阿哥");
Map hash=new HashMap();
hash.put("25","张三");
hash.put("19","李四");
tool.warn(hash);
response.add(DebugTool.HEADER_NAME,tool.response);
仅对最新版Firefox有效。新版chrome有自己的debug协议(使用websocket)。有趣的是,这本来是一个chrome浏览器支持的协议,后来chrome放弃了,而Firefox拿过来了。 参考:https://craig.is/writing/chrome-logger