自定義console.log

轉載請註明: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

相關文章
相關標籤/搜索