简单实用的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 相关文章推荐
js变量以及其作用域详解
Jul 18 Javascript
JQuery对id中含有特殊字符的转义处理示例
Sep 06 Javascript
jquery实现手机发送验证码的倒计时代码
Feb 12 Javascript
JavaScript File API实现文件上传预览
Feb 02 Javascript
原生js简单实现放大镜特效
May 16 Javascript
Vuex提升学习篇
Jan 11 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
Jul 17 Javascript
VUE-Table上绑定Input通过render实现双向绑定数据的示例
Aug 27 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
Aug 21 Javascript
JS 自执行函数原理及用法
Aug 05 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
Apr 21 Javascript
解决vue自定义组件@click点击失效问题
Apr 30 Vue.js
扩展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开发文件系统实例讲解
2006/10/09 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php rsa加密解密使用详解
2015/01/14 PHP
验证坐标在某坐标区域内php代码
2016/10/08 PHP
Laravel的Auth验证Token验证使用自定义Redis的例子
2019/09/30 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
Javascript的IE和Firefox兼容性汇编
2006/07/01 Javascript
input的focus方法使用
2010/03/13 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
js调用百度地图及调用百度地图的搜索功能
2015/09/07 Javascript
jquery插件ajaxupload实现文件上传操作
2015/12/09 Javascript
理解Javascript图片预加载
2016/02/23 Javascript
Javascript vue.js表格分页,ajax异步加载数据
2016/10/24 Javascript
微信小程序wx.getImageInfo()如何获取图片信息
2018/01/26 Javascript
详解使用Next.js构建服务端渲染应用
2018/07/10 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
详解使用angular框架离线你的应用(pwa指南)
2019/01/31 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
Vue和React有哪些区别
2020/09/12 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
Python部署web开发程序的几种方法
2017/05/05 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
Python实现Dijkstra算法
2018/10/17 Python
django 实现编写控制登录和访问权限控制的中间件方法
2019/01/15 Python
python实现图片转字符小工具
2019/04/30 Python
廉价连衣裙和婚纱礼服在线销售:Tbdress
2019/02/28 全球购物
医学生职业生涯规划书范文
2014/03/13 职场文书
全国文明单位申报材料
2014/05/31 职场文书
反邪教标语
2014/06/23 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
2015年幼儿园元旦亲子活动方案
2014/12/09 职场文书
2015年清剿火患专项行动工作总结
2015/07/27 职场文书
《山中访友》教学反思
2016/02/24 职场文书
python爬虫之爬取笔趣阁小说
2021/04/22 Python
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
MySQL的存储函数与存储过程的区别解析
2022/04/08 MySQL