简单实用的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 相关文章推荐
Prototype 工具函数 学习
Jul 23 Javascript
浅谈javascript中的DOM方法
Jul 16 Javascript
动态JavaScript所造成一些你不知道的危害
Sep 25 Javascript
bootstrapValidator自定验证方法写法
Dec 01 Javascript
如何写好你的JavaScript【推荐】
Mar 02 Javascript
node.js中使用Export和Import的方法
Sep 18 Javascript
Vue修改mint-ui默认样式的方法
Feb 03 Javascript
Vue 与 Vuex 的第一次接触遇到的坑
Aug 16 Javascript
vue2 设置router-view默认路径的实例
Sep 20 Javascript
详解js加减乘除精确计算
Mar 19 Javascript
基于Element的组件改造的树形选择器(树形下拉框)
Feb 27 Javascript
vue v-model的用法解析
Oct 19 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
PHP5常用函数列表(分享)
2013/06/07 PHP
javascript奇异的arguments分析
2010/10/20 Javascript
Js 去掉字符串中的空格(实现代码)
2013/11/19 Javascript
JS版的date函数(和PHP的date函数一样)
2014/05/12 Javascript
Javascript之String对象详解
2016/06/08 Javascript
js利用正则表达式检验输入内容是否为网址
2016/07/05 Javascript
基于Vuejs实现购物车功能
2016/08/02 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
详解Bootstrap的iCheck插件checkbox和radio
2016/08/24 Javascript
深入探讨Vue.js组件和组件通信
2016/09/12 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
JS实现unicode和UTF-8之间的互相转换互转
2017/07/05 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
Nuxt.js开启SSR渲染的教程详解
2018/11/30 Javascript
vue组件数据传递、父子组件数据获取,slot,router路由功能示例
2019/03/19 Javascript
js实现二级联动简单实例
2020/01/11 Javascript
webpack的 rquire.context用法实现工程自动化的方法
2020/02/07 Javascript
vue框架中props的typescript用法详解
2020/02/17 Javascript
Vue props中Object和Array设置默认值操作
2020/07/30 Javascript
封装 axios+promise通用请求函数操作
2020/08/11 Javascript
在JavaScript中查找字符串中最长单词的三种方法(推荐)
2021/01/18 Javascript
[02:34]肉山说——泡妞篇
2014/09/16 DOTA
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
Python OpenCV 直方图的计算与显示的方法示例
2018/02/08 Python
Python批量合并有合并单元格的Excel文件详解
2018/04/05 Python
numpy使用fromstring创建矩阵的实例
2018/06/15 Python
对python多线程中互斥锁Threading.Lock的简单应用详解
2019/01/11 Python
python里glob模块知识点总结
2021/01/05 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
2014年大学生社会实践自我鉴定
2014/09/26 职场文书
个人对照检查剖析材料
2014/10/13 职场文书
大学生实习推荐信
2015/03/27 职场文书
2015年双拥工作总结
2015/04/08 职场文书
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL