简单实用的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 相关文章推荐
改变javascript函数内部this指针指向的三种方法
Apr 23 Javascript
javascript之AJAX框架使用说明
Apr 24 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
javascript 拷贝节点cloneNode()使用介绍
Apr 03 Javascript
jQuery自定义添加"$"与解决"$"冲突的方法
Jan 19 Javascript
创建一般js对象的几种方式
Jan 19 Javascript
es7学习教程之Decorators(修饰器)详解
Jul 21 Javascript
javascript事件循环event loop的简单模型解释与应用分析
Mar 14 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
May 11 Javascript
浅谈vue中document.getElementById()拿到的是原值的问题
Jul 26 Javascript
Vue实现input宽度随文字长度自适应操作
Jul 29 Javascript
TS 类型兼容教程示例详解
Sep 23 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文件缓存方法总结
2016/03/16 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
PHP中时间加减函数strtotime用法分析
2017/04/26 PHP
thinkPHP框架RBAC实现原理分析
2019/02/01 PHP
javascript十个最常用的自定义函数(中文版)
2009/09/07 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
js模仿html5 placeholder适应于不支持的浏览器
2013/01/13 Javascript
JavaScript中使用Callback控制流程介绍
2015/03/16 Javascript
在localStorage中存储对象数组并读取的方法
2016/09/24 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
JS实现的按钮点击颜色切换功能示例
2017/10/19 Javascript
vue component 中引入less文件报错 Module build failed
2019/04/17 Javascript
js微信分享接口调用详解
2019/07/23 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
在Angular项目使用socket.io实现通信的方法
2021/01/05 Javascript
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
解读python logging模块的使用方法
2018/04/17 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
python用列表生成式写嵌套循环的方法
2018/11/08 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
python自动化测试之DDT数据驱动的实现代码
2019/07/23 Python
Python开发之基于模板匹配的信用卡数字识别功能
2020/01/13 Python
4行Python代码生成图像验证码(2种)
2020/04/07 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
编写一子程序,将一链表倒序,即使链表表尾变表头,表头变表尾
2016/02/10 面试题
中英文求职信范文
2014/01/27 职场文书
会计与出纳自荐书范文
2014/03/16 职场文书
运动会横幅标语
2014/06/17 职场文书
2014迎国庆标语大全
2014/09/19 职场文书
2014年实习期工作总结
2014/11/27 职场文书
初中重阳节活动总结
2015/05/05 职场文书
2015年高校教师个人工作总结
2015/05/25 职场文书
中学图书馆工作总结
2015/08/11 职场文书
2016学校先进集体事迹材料
2016/02/29 职场文书
担保书范文
2019/07/09 职场文书
解决Goland 同一个package中函数互相调用的问题
2021/05/06 Golang