简单实用的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 匿名函数及其代码模式原理
Mar 19 Javascript
基于prototype扩展的JavaScript常用函数库
Nov 30 Javascript
jQuery 无限级菜单的简单实例
Feb 21 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
Sep 09 Javascript
详解JavaScript中常用的函数类型
Nov 18 Javascript
jQuery+css实现炫目的动态块漂移效果
Jan 28 Javascript
Ionic如何实现下拉刷新与上拉加载功能
Jun 03 Javascript
详解用webpack2搭建angular2的项目
Jun 22 Javascript
vue动态禁用控件绑定disable的例子
Oct 28 Javascript
Node.js web 应用如何封装到Docker容器中
Sep 01 Javascript
vue-calendar-component 封装多日期选择组件的实例代码
Dec 04 Vue.js
vue生命周期钩子函数以及触发时机
Apr 26 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
windows下PHP APACHE MYSQ完整配置
2007/01/02 PHP
PHP CURL CURLOPT参数说明(curl_setopt)
2013/09/30 PHP
php出现web系统多域名登录失败的解决方法
2014/09/30 PHP
深入解析WordPress中加载模板的get_template_part函数
2016/01/11 PHP
PHP图片加水印实现方法
2016/05/06 PHP
PHP模块化安装教程
2016/06/01 PHP
php cookie用户登录的详解及实例代码
2017/01/03 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
js兼容火狐显示上传图片预览效果的方法
2015/05/21 Javascript
JavaScript实现自动弹出窗口并自动关闭窗口的方法
2015/08/06 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
深入理解Ajax的get和post请求
2016/06/02 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
web前端vue filter 过滤器
2018/01/12 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
JS闭包原理与应用经典示例
2018/12/20 Javascript
vue 点击展开显示更多(点击收起部分隐藏)
2019/04/09 Javascript
json_decode 索引为数字时自动排序问题解决方法
2020/03/28 Javascript
Python中变量交换的例子
2014/08/25 Python
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python实现ping的方法
2015/07/06 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Python selenium 自动化脚本打包成一个exe文件(推荐)
2020/01/14 Python
学生如何注册Pycharm专业版以及pycharm的安装
2020/09/24 Python
世界领先的以旅馆为主的在线预订平台:Hostelworld
2016/10/09 全球购物
vue 中 get / delete 传递数组参数方法
2021/03/23 Vue.js
《爱如茉莉》教后反思
2014/04/12 职场文书
小学数学教研活动总结
2014/07/01 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
公司更名通知函
2015/04/24 职场文书
2015年公务员试用期工作总结
2015/05/28 职场文书
高二英语教学反思
2016/03/03 职场文书
springboot读取nacos配置文件
2022/05/20 Java/Android
python如何读取和存储dict()与.json格式文件
2022/06/25 Python