简单实用的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 相关文章推荐
jQueryUI的Dialog的简单封装
Jun 07 Javascript
jquery操作select option 的代码小结
Jun 21 Javascript
jQuery制作仿腾讯web qq用户体验桌面
Aug 20 Javascript
jQuery setTimeout传递字符串参数报错的解决方法
Jun 09 Javascript
javascript实现多栏闭合展开式广告位菜单效果实例
Aug 05 Javascript
创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件
Jun 02 Javascript
浅谈jquery高级方法描述与应用
Oct 04 Javascript
使用BootStrap进行轮播图的制作
Jan 06 Javascript
Vue2 Vue-cli中使用Typescript的配置详解
Jul 24 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
Vuex中的State使用介绍
Jan 19 Javascript
微信小程序实现商品属性联动选择
Feb 15 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中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
php实现文件下载(支持中文文名)
2013/12/04 PHP
PHP获取表单所有复选框的值的方法
2014/08/28 PHP
thinkphp3.2实现在线留言提交验证码功能
2017/07/19 PHP
Javascript miscellanea -display data real time, using window.status
2007/01/09 Javascript
Javascript优化技巧(文件瘦身篇)
2008/01/28 Javascript
JQuery 图片的展开和伸缩实例讲解
2013/04/18 Javascript
jQuery图片切换插件jquery.cycle.js使用示例
2014/06/16 Javascript
javascript检查浏览器是否已经启用XX功能
2015/07/10 Javascript
JavaScript缓冲运动实现方法(2则示例)
2016/01/08 Javascript
用JS动态设置CSS样式常见方法小结(推荐)
2016/11/10 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
vue2.0 使用element-ui里的upload组件实现图片预览效果方法
2018/09/04 Javascript
深入学习JavaScript 高阶函数
2019/06/11 Javascript
快速了解Vue父子组件传值以及父调子方法、子调父方法
2020/07/15 Javascript
基于JS实现计算24点算法代码实例解析
2020/07/23 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
通过python实现windows桌面截图代码实例
2020/01/17 Python
PyCharm取消波浪线、下划线和中划线的实现
2020/03/03 Python
Python求两个字符串最长公共子序列代码实例
2020/03/05 Python
对python中arange()和linspace()的区别说明
2020/05/03 Python
python 监控logcat关键字功能
2020/09/04 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
2021/03/04 Python
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
KENZO官网:高田贤三在法国创立的品牌
2019/05/16 全球购物
一些Solaris面试题
2015/12/22 面试题
高一自我鉴定
2013/12/17 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
作风建设年活动实施方案
2014/10/24 职场文书
python_tkinter弹出对话框创建
2022/03/20 Python
Python必备技巧之函数的使用详解
2022/04/04 Python