简单实用的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的将DropDownlist的选中值赋给label的实现代码
May 06 Javascript
javascript 日期时间 转换的方法
Feb 21 Javascript
jQuery中delegate和on的用法与区别详细解析
Jan 26 Javascript
jquery实现简单的无缝滚动
Apr 15 Javascript
js简单判断flash是否加载完成的方法
Jun 21 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
Dec 27 Javascript
Vue数据驱动模拟实现2
Jan 11 Javascript
js, jQuery实现全选、反选功能
Mar 08 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
Jan 10 Javascript
基于jquery实现彩色投票进度条代码解析
Aug 26 jQuery
JavaScript实现鼠标经过表格某行时此行变色
Nov 20 Javascript
js正则匹配markdown里的图片标签的实现
Mar 24 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
ThinkPHP之getField详解
2014/06/20 PHP
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
ExtJS4如何自动生成控制grid的列显示、隐藏的checkbox
2014/05/02 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
简单实现限制uploadify上传个数
2015/11/16 Javascript
每天一篇javascript学习小结(Function对象)
2015/11/16 Javascript
javascript时间戳和日期字符串相互转换代码(超简单)
2016/06/22 Javascript
js仿小米官网图片轮播特效
2016/09/29 Javascript
关于webuploader插件使用过程遇到的小问题
2016/11/07 Javascript
jQuery获取选中单选按钮radio的值
2016/12/27 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
javaScript 逻辑运算符使用技巧整理
2017/05/03 Javascript
完美解决linux下node.js全局模块找不到的情况
2018/05/16 Javascript
十分钟教你上手ES2020新特性
2020/02/12 Javascript
详解JS预解析原理
2020/06/16 Javascript
python中的实例方法、静态方法、类方法、类变量和实例变量浅析
2014/04/26 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Linux中Python 环境软件包安装步骤
2016/03/31 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
Python检测生僻字的实现方法
2016/10/23 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
完美解决pyinstaller打包报错找不到依赖pypiwin32或pywin32-ctypes的错误
2020/04/01 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
Python3+PyCharm+Django+Django REST framework配置与简单开发教程
2021/02/16 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
数字漫画:comiXology
2020/06/13 全球购物
两道JAVA笔试题
2016/09/14 面试题
职业技术学校毕业生推荐信
2013/12/03 职场文书
高中体育教学反思
2014/01/24 职场文书
课外科技活动总结
2014/08/27 职场文书
员工开除通知书
2015/04/25 职场文书
团日活动总结格式
2015/05/11 职场文书
入党介绍人意见怎么写
2015/06/03 职场文书