轉載請註明:http://www.cnblogs.com/yufu/p/4054471.html html
1 /** 2 *name: 自定義仿console.log 3 *function: 深度輸出對象數據 4 *author: 梁快升 5 *department:無線公共支持touch FE 6 **/ 7 /* 8 var str = myConsole.log(data,false); 9 nodejs控制檯輸出:第一個參數爲數據,第二個參數爲是否格式化(可爲空,默認爲true) 10 11 var str = myConsole.logFileAdd('e:/log2.txt',data,false); 12 nodejs添加輸出到文件 13 var str = myConsole.logFileNew('e:/log2.txt',data,false); 14 nodejs覆蓋輸出到文件 15 第一個參數爲文件路徑,第二個參數爲數據,第三個參數爲是否格式化(可爲空,默認爲true) 16 17 var str = myConsole.logHtml(data,true,false); 18 瀏覽器 輸出到Html:第一個參數爲數據,第二個參數爲是否格式化(可爲空,默認爲true),第三個參數爲是否添加節點到html(可爲空,默認爲true) 19 注意:若要設置第三個參數,則第二個參數必須顯式設置 20 */ 21 22 /*注意:若在非node.js環境中使用,須要註釋掉下面兩句,不然會報錯*/ 23 var fs = require('fs'); //node.js文件輸出 24 var sys = require('sys'); //node.js控制檯輸出 25 26 var myConsole = function() {}; 27 myConsole.prototype = { 28 log : Log, //nodejs控制檯輸出 29 logFileAdd : LogFileAdd, //nodejs添加輸出到文件 30 logFileNew : LogFileNew, //nodejs覆蓋輸出到文件 31 logHtml : LogHtml //瀏覽器 輸出到Html 32 } 33 34 /***************配置項****************************/ 35 var nextLine = '\r\n';//換行符號 36 var tabChar = ' ';//縮進符號 37 var _out_str = "";//緩存字符串 38 /*************************************************/ 39 40 /*****************所有組裝完成後一塊兒輸出*********************************************/ 41 /*輸出或者拼接*/ 42 var output = function (obj){ 43 _out_str += obj; 44 }; 45 /*拼接要輸出的字符串*/ 46 function getOutStr(obj,isFormate){//isFormate是否縮進 47 _out_str = ''; 48 mylog(obj,1,isFormate); 49 printLn(true); 50 } 51 /*添加輸出到文件*/ 52 function LogFileAdd(file,obj,isFormate){ 53 getOutStr(obj,isFormate); 54 saveFile(file,'a',_out_str); 55 return _out_str; 56 } 57 /*覆蓋輸出到文件*/ 58 function LogFileNew(file,obj,isFormate){ 59 getOutStr(obj,isFormate); 60 saveFile(file,'n',_out_str); 61 return _out_str; 62 } 63 /*控制檯輸出*/ 64 function Log(obj,isFormate){ 65 getOutStr(obj,isFormate); 66 sys.print(_out_str); 67 return _out_str; 68 } 69 /*html輸出*/ 70 function LogHtml(obj,isFormate,isAddPre){//isAddPre是否添加到html,默認添加 71 getOutStr(obj,isFormate); 72 if(isAddPre == null)isAddPre = true; 73 if(isAddPre){ 74 var pre=document.createElement("pre"); 75 pre.className = "log-disp-pre"; 76 var node=document.createTextNode(_out_str); 77 pre.appendChild(node); 78 document.body.appendChild(pre); 79 // $('body').append('<pre class="log-disp-pre">'+ _out_str + '</pre>'); 80 } 81 return _out_str; 82 } 83 /***寫入文件**************** 84 *type = 'a'爲添加,'n'爲覆蓋 85 ***************************/ 86 var saveFile = function (file,type,content){ 87 switch(type){ 88 case 'a':{ 89 fs.appendFile(file, content, function (err) { 90 if (err) throw err; 91 console.log(file + ':It\'s saved append!'); //文件被保存 92 }); 93 break; 94 } 95 case 'n':{ 96 fs.writeFile(file, content, function (err) { 97 if (err) throw err; 98 console.log(file + ':It\'s saved new!'); //文件被保存 99 }); 100 break; 101 } 102 } 103 }; 104 /***************************************************************************************/ 105 106 /******************不進行組裝,一個個輸出*************************/ 107 // var output = function (obj){ 108 // sys.print(obj); 109 // // console.log(obj); 110 // // process.stdout.write(obj); 111 // }; 112 // function Log(obj,isFormate){ 113 // mylog(obj,1,isFormate); 114 // printLn(true); 115 // } 116 /*******************************************/ 117 /*處理數據*/ 118 function mylog(obj,deep,isFormate){ 119 if(!deep)deep=1; 120 switch(dataType(obj)){ 121 case 1:{ 122 output('"'); 123 output(obj); 124 output('"'); 125 break; 126 } 127 // case 2:{ 128 // break; 129 // } 130 case 3:{ 131 output('"'); 132 output(obj.toString()); 133 output('"'); 134 break; 135 } 136 case 4:{ 137 output(obj); 138 // if(obj){output(true);}else{output(false);} 139 break; 140 } 141 // case 5:{ 142 // break; 143 // } 144 case 6:{ 145 output('{'); 146 printLn(isFormate); 147 var num1 = 0,num2 = 0; 148 for(var key in obj){num1++;} 149 for(var key in obj){ 150 printSpace(deep,isFormate); 151 output(key); 152 output(':'); 153 printStr(' ',isFormate); 154 mylog(obj[key],deep+1,isFormate); 155 num2++; 156 if(num2 < num1)output(','); 157 printLn(isFormate); 158 } 159 printSpace(deep-1,isFormate); 160 output('}'); 161 break; 162 } 163 case 7:{ 164 output('['); 165 for(var j=0;j<obj.length-1;j++){ 166 printLn(isFormate); 167 printSpace(deep,isFormate); 168 mylog(obj[j],deep+1,isFormate); 169 output(','); 170 } 171 if(obj.length > 0){ 172 printLn(isFormate); 173 printSpace(deep,isFormate); 174 mylog(obj[obj.length-1],deep+1,isFormate); 175 printLn(isFormate); 176 } 177 printSpace(deep-1,isFormate); 178 output(']'); 179 break; 180 } 181 default:{ 182 output(obj); 183 break; 184 } 185 } 186 }; 187 var printStr = function (str,isFormate){ 188 if(isFormate == null)isFormate = true; 189 if(isFormate){ 190 output(str); 191 } 192 }; 193 var printSpace = function (deep,isFormate){ 194 for(var i=0;i<deep;i++){ 195 printStr(tabChar,isFormate); 196 } 197 }; 198 var printLn = function (isFormate){ 199 printStr(nextLine,isFormate); 200 }; 201 var dataType = function (obj){ 202 var className = toString.call(obj); 203 switch (className) { 204 case '[object String]': 205 return 1; 206 case '[object Number]': 207 return 2; 208 case '[object Date]': 209 return 3; 210 case '[object Boolean]': 211 return 4; 212 case '[object RegExp]': 213 return 5; 214 case '[object Object]': 215 return 6; 216 case '[object Array]': 217 return 7; 218 } 219 return 0; 220 }; 221 module.exports = new myConsole();
轉載請註明:http://www.cnblogs.com/yufu/p/4054471.htmlnode