简单实用的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 StringBuilder类实现
Dec 22 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
js获取select选中的option的text示例代码
Dec 19 Javascript
Jquery之Bind方法参数传递与接收的三种方法
Jun 24 Javascript
JS逆序遍历实现代码
Dec 02 Javascript
javascript函数命名的三种方式及区别介绍
Mar 22 Javascript
基于javascript实现九宫格大转盘效果
May 28 Javascript
JS+CSS3实现超炫的散列画廊特效
Jul 16 Javascript
基于BootstrapValidator的Form表单验证(24)
Dec 12 Javascript
React Native react-navigation 导航使用详解
Dec 01 Javascript
基于$.ajax()方法从服务器获取json数据的几种方式总结
Jan 31 Javascript
JavaScript实现省份城市的三级联动
Feb 11 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 CLI模式下的多进程应用分析
2013/06/03 PHP
PHP list() 将数组中的值赋给变量的简单实例
2016/06/13 PHP
PHP使用curl函数发送Post请求的注意事项
2016/11/26 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
laravel框架中表单请求类型和CSRF防护实例分析
2019/11/23 PHP
javascript中类的定义及其方式(《javascript高级程序设计》学习笔记)
2011/07/04 Javascript
jQuery EasyUI API 中文文档 - Pagination分页
2011/09/29 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
javascript中的取反再取反~~没有意义
2014/04/06 Javascript
BAT及各大互联网公司2014前端笔试面试题--JavaScript篇
2014/10/29 Javascript
jquery实现相册一下滑动两次的方法
2015/02/09 Javascript
BootStrap智能表单demo示例详解
2016/06/13 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
jQuery插件HighCharts绘制简单2D柱状图效果示例【附demo源码】
2017/03/21 jQuery
Vue.js中对css的操作(修改)具体方式详解
2018/10/30 Javascript
微信小程序HTTP请求从0到1封装
2019/09/09 Javascript
微信小程序仿抖音短视频切换效果的实例代码
2020/06/24 Javascript
[02:25]DOTA2英雄基础教程 生死判决瘟疫法师
2013/12/06 DOTA
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
关于Python的一些学习总结
2018/05/25 Python
python使用Matplotlib绘制分段函数
2018/09/25 Python
在python里从协程返回一个值的示例
2019/02/19 Python
django中media媒体路径设置的步骤
2019/11/15 Python
使用wxpy实现自动发送微信消息功能
2020/02/28 Python
python图片合成的示例
2020/11/09 Python
基于DOM+CSS3实现OrgChart组织结构图插件
2016/03/02 HTML / CSS
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
如何配置、使用和清除Smarty缓存
2015/12/23 面试题
求职简历自荐信范文
2013/10/21 职场文书
工程项目建议书范文
2014/03/12 职场文书
法定代表人授权委托书
2014/04/04 职场文书
2014年重阳节老干部座谈会上的讲话稿
2014/09/25 职场文书
爸爸的三轮车观后感
2015/06/16 职场文书
学校就业保障协议书
2019/06/24 职场文书
Django + Taro 前后端分离项目实现企业微信登录功能
2022/04/07 Python