简单实用的js调试logger组件实现代码


Posted in Javascript onNovember 20, 2010

但这两种方式都有它的局限性,alert会有中断,有些时候alert出来的值并不可靠,闭包的时候用alert可能会得到不正确的值。debugger使用起来其实也挺纠结的,只有ie支持。所以最合理的方式是js把运行过程需要调试的值输出到页面,或者写到cookie也可以,这种方式不会有alert中断带来值不正确的问题,也不会受浏览器类型的限制,唯一纠结的是操作起来很麻烦。
于是,有了下面说的这个js组件。这个组件的实现参考了log4net组件的记录方式,我们利用这个js的logger组件,就可以用log的输出的方式来进行你的调试工作了。

/* 
js调试组件 
*/ 
(function () { 
var logger = function (level, object, viewType) { 
this.level = level; 
this.object = object; 
this.viewType = viewType; 
} 
logger.LEVEL_DEBUG = 0; 
logger.LEVEL_INFO = 1; 
logger.LEVEL_WARN = 2; 
logger.LEVEL_ERROR = 3; 
logger.LEVEL_FATAL = 4; 
logger.VIEW_TYPE_ALERT = 0; 
logger.VIEW_TYPE_APPEND = 1; 
logger.prototype = { 
setLevel: function (level) { 
this.level = level; 
}, 
setObject: function (o) { 
if (typeof o == 'string') { 
this.object = document.getElementById(o); 
} else { 
this.object = o; 
} 
}, 
setViewType: function (type) { 
this.viewType = type; 
}, 
log: function (s) { 
this.message(100, s); 
}, 
debug: function (s) { 
this.message(logger.LEVEL_DEBUG, s); 
}, 
info: function (s) { 
this.message(logger.LEVEL_INFO, s); 
}, 
warn: function (s) { 
this.message(logger.LEVEL_WARN, s); 
}, 
error: function (s) { 
this.message(logger.LEVEL_ERROR, s); 
}, 
fatal: function (s) { 
this.message(logger.LEVEL_FATAL, s); 
}, 
message: function (level, s) { 
if (level >= this.level) { 
if (this.object != null) { 
this.object.innerHTML = s; 
} else if (this.viewType == logger.VIEW_TYPE_ALERT) { 
alert(s); 
} else { 
document.body.appendChild(document.createTextNode(s)); 
document.body.appendChild(document.createElement("br")); 
} 
} 
} 
}; 
if (typeof window.Logger == 'undefined' || window.Logger == null) 
window.Logger = new logger(logger.LEVEL_DEBUG, null, logger.VIEW_TYPE_APPEND); 
})();

怎么使用呢?
这个js组件往window对象注册了Logger对象,我们可以用Logger.log/Logger.debug/Logger.info/Logger.warn/Logger.error/Logger.fatal来输出不同的调试信息。
示例代码如下:
Logger.debug(new Date()); 
Logger.debug(new Date().addHours(3));

很简单,再也不用每个地方都写document.getElementId().innerHtml或者alert/debugger来输出内容了。
示例代码中使用的addHours是我扩展js的Date对象方法,想要了解更多的朋友可以查看《扩展js的Date方法》。
Javascript 相关文章推荐
Jquery实现搜索框提示功能示例代码
Aug 13 Javascript
node.js WEB开发中图片验证码的实现方法
Jun 03 Javascript
js使用removeChild方法动态删除div元素
Aug 01 Javascript
js中数组排序sort方法的原理分析
Nov 20 Javascript
javascript中Date对象应用之简易日历实现
Jul 12 Javascript
[原创]JS基于FileSaver.js插件实现文件保存功能示例
Dec 08 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
Jan 11 Javascript
javaScript 逻辑运算符使用技巧整理
May 03 Javascript
使用vue构建一个上传图片表单
Jul 04 Javascript
js实现简单模态框实例
Nov 16 Javascript
基于Vue中使用节流Lodash throttle详解
Oct 30 Javascript
html+vue.js 实现漂亮分页功能可兼容IE
Nov 07 Javascript
扩展javascript的Date方法实现代码(prototype)
Nov 20 #Javascript
javascript AOP 实现ajax回调函数使用比较方便
Nov 20 #Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
Nov 20 #Javascript
javascript来定义类的规范小结
Nov 19 #Javascript
Javascript面象对象成员、共享成员变量实验
Nov 19 #Javascript
js 创建快捷方式的代码(fso)
Nov 19 #Javascript
javascript 函数参数限制说明
Nov 19 #Javascript
You might like
php常用Output和ptions/Info函数集介绍
2013/06/19 PHP
phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
2016/02/03 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
2016/07/18 PHP
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
用js实现trim()的解决办法
2013/04/16 Javascript
jquery的flexigrid无法显示数据提示获取到数据
2013/07/19 Javascript
返回上一页并自动刷新的JavaScript代码
2014/02/19 Javascript
JS实现网页背景颜色与select框中颜色同时变化的方法
2015/02/27 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
jquery实现鼠标经过显示下划线的渐变下拉菜单效果代码
2015/08/24 Javascript
jQuery插件passwordStrength密码强度指标详解
2016/06/24 Javascript
JavaScript基础重点(必看)
2016/07/09 Javascript
jquery代码规范让代码越来越好看
2017/02/03 Javascript
angularJS 发起$http.post和$http.get请求的实现方法
2017/05/18 Javascript
Vue实现textarea固定输入行数与添加下划线样式的思路详解
2018/06/28 Javascript
详解如何在vscode里面调试js和node.js的方法步骤
2018/12/24 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
python中Flask框架简单入门实例
2015/03/21 Python
python比较2个xml内容的方法
2015/05/11 Python
书单|人生苦短,你还不用python!
2017/12/29 Python
Django中url的反向查询的方法
2018/03/14 Python
PyTorch线性回归和逻辑回归实战示例
2018/05/22 Python
python使用Matplotlib画饼图
2018/09/25 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
娱乐地球:Entertainment Earth
2020/01/08 全球购物
意大利领先的奢侈品在线时装零售商:MCLABELS
2020/10/13 全球购物
J2EE面试题
2016/03/14 面试题
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
Ruby中的保护方法和私有方法与一般面向对象程序设计语言的一样吗
2013/05/01 面试题
转党组织关系介绍信
2014/01/08 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
个人安全承诺书
2014/05/22 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
师德师风整改措施
2014/10/24 职场文书
导游词之包公祠
2019/11/25 职场文书
使用Spring处理x-www-form-urlencoded方式
2021/11/02 Java/Android