Skip to content

Commit cc5c8df

Browse files
committed
Enhance the logger
- IE 9- compability - Add log point in qiniu.js to collection debug info
1 parent 9dd2a97 commit cc5c8df

File tree

5 files changed

+252
-114
lines changed

5 files changed

+252
-114
lines changed

demo/scripts/main.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ $(function() {
1010
browse_button: 'pickfiles',
1111
container: 'container',
1212
drop_element: 'container',
13-
max_file_size: '100mb',
13+
max_file_size: '1000mb',
1414
flash_swf_url: 'bower_components/plupload/js/Moxie.swf',
1515
dragdrop: true,
1616
chunk_size: '4mb',
@@ -29,7 +29,7 @@ $(function() {
2929
// },
3030
// },
3131
auto_start: true,
32-
log_level: 6,
32+
log_level: 5,
3333
init: {
3434
'FilesAdded': function(up, files) {
3535
$('table').show();

dist/qiniu.js

Lines changed: 124 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
function QiniuJsSDK() {
2020

21+
var that = this;
22+
2123
var qiniuUploadUrl;
2224
if (window.location.protocol === 'https:') {
2325
qiniuUploadUrl = 'https://up.qbox.me';
@@ -52,30 +54,45 @@ function QiniuJsSDK() {
5254
ERROR: 2,
5355
WARN: 3,
5456
INFO: 4,
55-
Debug: 5,
57+
DEBUG: 5,
5658
TRACE: 6,
57-
level: 0,
58-
log: function(){
59-
logger.log.history = logger.log.history || [];
60-
logger.log.history.push(arguments);
61-
if(window.console && window.console.log && logger.level>=logger.TRACE){
59+
level: 0
60+
};
61+
62+
function log(type, args){
63+
var header = "[qiniu-js-sdk]["+type+"]";
64+
if (that.detectIEVersion()) {
65+
// http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9
66+
//var log = Function.prototype.bind.call(console.log, console);
67+
//log.apply(console, args);
68+
var msg = header;
69+
for (var i = 0; i < args.length; i++) {
70+
msg+=that.stringifyJSON(args[i]);
71+
}
72+
console.log(msg);
73+
}else{
74+
args.unshift(header);
75+
console.log.apply(console, args);
76+
}
77+
}
78+
79+
function makeLogFunc(code){
80+
var func = code.toLowerCase();
81+
logger[func] = function(){
82+
// logger[func].history = logger[func].history || [];
83+
// logger[func].history.push(arguments);
84+
if(window.console && window.console.log && logger.level>=logger[code]){
6285
var args = Array.prototype.slice.call(arguments);
63-
if (that.detectIEVersion()) {
64-
// http://stackoverflow.com/questions/5538972/console-log-apply-not-working-in-ie9
65-
//var log = Function.prototype.bind.call(console.log, console);
66-
//log.apply(console, args);
67-
var msg = "[qiniu-js-sdk]";
68-
for (var i = 0; i < args.length; i++) {
69-
msg+=that.stringifyJSON(args[i]);
70-
}
71-
console.log(msg);
72-
}else{
73-
args.unshift("[qiniu-js-sdk]");
74-
console.log.apply(console, args);
75-
}
86+
log(func,args);
7687
}
88+
};
89+
}
90+
91+
for (var property in logger){
92+
if (logger.hasOwnProperty(property) && (typeof logger[property]) === "number" && !logger.hasOwnProperty(property.toLowerCase())) {
93+
makeLogFunc(property);
7794
}
78-
};
95+
}
7996

8097

8198
/**
@@ -325,10 +342,47 @@ function QiniuJsSDK() {
325342
return eval('('+text+')');
326343
};
327344

328-
this.stringifyJSON = function(json) {
345+
/**
346+
* parse javascript object to json string
347+
* @param {Object} object
348+
* @return {String} json string
349+
*/
350+
this.stringifyJSON = function(obj) {
329351
// Attempt to parse using the native JSON parser first
330352
if (window.JSON && window.JSON.stringify) {
331-
return window.JSON.stringify(json);
353+
return window.JSON.stringify(obj);
354+
}
355+
switch (typeof (obj)) {
356+
case 'string':
357+
return '"' + obj.replace(/(["\\])/g, '\\$1') + '"';
358+
case 'array':
359+
return '[' + obj.map(that.stringifyJSON).join(',') + ']';
360+
case 'object':
361+
if (obj instanceof Array) {
362+
var strArr = [];
363+
var len = obj.length;
364+
for (var i = 0; i < len; i++) {
365+
strArr.push(that.stringifyJSON(obj[i]));
366+
}
367+
return '[' + strArr.join(',') + ']';
368+
} else if (obj === null) {
369+
return 'null';
370+
} else {
371+
var string = [];
372+
for (var property in obj) {
373+
if (obj.hasOwnProperty(property)) {
374+
string.push(that.stringifyJSON(property) + ':' + that.stringifyJSON(obj[property]));
375+
}
376+
}
377+
return '{' + string.join(',') + '}';
378+
}
379+
break;
380+
case 'number':
381+
return obj;
382+
case false:
383+
return obj;
384+
case 'boolean':
385+
return obj;
332386
}
333387
};
334388

@@ -341,8 +395,6 @@ function QiniuJsSDK() {
341395
return text === null ? "" : text.replace(/^\s+|\s+$/g, '');
342396
};
343397

344-
var that = this;
345-
346398
/**
347399
* create a uploader by QiniuJsSDK
348400
* @param {object} options to create a new uploader
@@ -362,11 +414,11 @@ function QiniuJsSDK() {
362414
throw 'browse_button setting in options is required!';
363415
}
364416

365-
logger.log("init uploader");
417+
logger.debug("init uploader start");
366418

367-
logger.log("environment: ", mOxie.Env);
419+
logger.debug("environment: ", mOxie.Env);
368420

369-
logger.log("userAgent: ", navigator.userAgent);
421+
logger.debug("userAgent: ", navigator.userAgent);
370422

371423
var option = {};
372424

@@ -424,10 +476,11 @@ function QiniuJsSDK() {
424476
// reset chunk_size to max_chunk_size(4m) when chunk_size > 4m
425477
}
426478
// if op.chunk_size set 0 will be cause to direct upload
427-
logger.log("reset chunk size:", op.chunk_size);
428479
};
429480

430481
reset_chunk_size();
482+
logger.debug("invoke reset_chunk_size()");
483+
logger.debug("op.chunk_size: ", op.chunk_size);
431484

432485
// if op.uptoken has no value
433486
// get token from 'uptoken_url'
@@ -479,50 +532,54 @@ function QiniuJsSDK() {
479532
}
480533
});
481534

482-
logger.log("option: ", option);
535+
logger.debug("option: ", option);
483536

484537
// create a new uploader with composed options
485538
var uploader = new plupload.Uploader(option);
486539

487-
logger.log("create plupload.Uploader");
540+
logger.debug("new plupload.Uploader(option)");
488541

489542
// bind getUpToken to 'Init' event
490543
uploader.bind('Init', function(up, params) {
491-
logger.log("uploader Init");
544+
logger.debug("Init event activated");
492545
getUpToken();
493546
});
494547

495-
logger.log("bind Init event");
496-
497-
// init uploader
498-
uploader.init();
499-
500-
logger.log("uploader init");
548+
logger.debug("bind Init event");
501549

502550
// bind 'FilesAdded' event
503551
// when file be added and auto_start has set value
504552
// uploader will auto start upload the file
505553
uploader.bind('FilesAdded', function(up, files) {
506-
logger.log("uploader FilesAdded");
554+
logger.debug("FilesAdded event activated");
507555
var auto_start = up.getOption && up.getOption('auto_start');
508556
auto_start = auto_start || (up.settings && up.settings.auto_start);
557+
logger.debug("auto_start: ", auto_start);
558+
logger.debug("files: ", files);
509559
if (auto_start) {
510-
plupload.each(files, function(i, file) {
560+
setTimeout(function(){
511561
up.start();
512-
});
562+
logger.debug("invoke up.start()");
563+
}, 0);
564+
// up.start();
565+
// plupload.each(files, function(i, file) {
566+
// up.start();
567+
// logger.debug("invoke up.start()")
568+
// logger.debug("file: ", file);
569+
// });
513570
}
514571
up.refresh(); // Reposition Flash/Silverlight
515572
});
516573

517-
logger.log("bind FilesAdded event");
574+
logger.debug("bind FilesAdded event");
518575

519576
// bind 'BeforeUpload' event
520577
// intercept the process of upload
521578
// - prepare uptoken
522579
// - according the chunk size to make differnt upload strategy
523580
// - resume upload with the last breakpoint of file
524581
uploader.bind('BeforeUpload', function(up, file) {
525-
logger.log("uploader BeforeUpload");
582+
logger.debug("BeforeUpload event activated");
526583
// add a key named speed for file object
527584
file.speed = file.speed || 0;
528585
ctx = '';
@@ -545,7 +602,7 @@ function QiniuJsSDK() {
545602
};
546603
}
547604

548-
logger.log("directUpload multipart_params_obj: ", multipart_params_obj);
605+
logger.debug("directUpload multipart_params_obj: ", multipart_params_obj);
549606

550607
var x_vars = op.x_vars;
551608
if (x_vars !== undefined && typeof x_vars === 'object') {
@@ -581,10 +638,14 @@ function QiniuJsSDK() {
581638

582639
var chunk_size = up.getOption && up.getOption('chunk_size');
583640
chunk_size = chunk_size || (up.settings && up.settings.chunk_size);
641+
642+
logger.debug("uploader.runtime: ",uploader.runtime);
643+
logger.debug("chunk_size: ",chunk_size);
644+
584645
// TODO: flash support chunk upload
585-
if (uploader.runtime === 'html5' && chunk_size) {
646+
if ((uploader.runtime === 'html5' || uploader.runtime === 'flash') && chunk_size) {
586647
if (file.size < chunk_size || is_android_weixin_or_qq()) {
587-
logger.log("directUpload because file.size < chunk_size || is_android_weixin_or_qq()");
648+
logger.debug("directUpload because file.size < chunk_size || is_android_weixin_or_qq()");
588649
// direct upload if file size is less then the chunk size
589650
directUpload(up, file, that.key_handler);
590651
} else {
@@ -652,18 +713,18 @@ function QiniuJsSDK() {
652713
});
653714
}
654715
} else {
655-
logger.log("directUpload because uploader.runtime !== 'html5' || !chunk_size");
716+
logger.debug("directUpload because uploader.runtime !== 'html5' || !chunk_size");
656717
// direct upload if runtime is not html5
657718
directUpload(up, file, that.key_handler);
658719
}
659720
});
660721

661-
logger.log("bind BeforeUpload event");
722+
logger.debug("bind BeforeUpload event");
662723

663724
// bind 'UploadProgress' event
664725
// calculate upload speed
665726
uploader.bind('UploadProgress', function(up, file) {
666-
logger.log("uploader UploadProgress");
727+
logger.trace("UploadProgress event activated");
667728
speedCalInfo.currentTime = new Date().getTime();
668729
var timeUsed = speedCalInfo.currentTime - speedCalInfo.startTime; // ms
669730
var fileUploaded = file.loaded || 0;
@@ -673,12 +734,12 @@ function QiniuJsSDK() {
673734
file.speed = (fileUploaded / timeUsed * 1000).toFixed(0) || 0; // unit: byte/s
674735
});
675736

676-
logger.log("bind UploadProgress event");
737+
logger.debug("bind UploadProgress event");
677738

678739
// bind 'ChunkUploaded' event
679740
// store the chunk upload info and set next chunk upload url
680741
uploader.bind('ChunkUploaded', function(up, file, info) {
681-
logger.log("uploader ChunkUploaded");
742+
logger.debug("ChunkUploaded event activated");
682743
var res = that.parseJSON(info.response);
683744
// ctx should look like '[chunk01_ctx],[chunk02_ctx],[chunk03_ctx],...'
684745
ctx = ctx ? ctx + ',' + res.ctx : res.ctx;
@@ -699,13 +760,14 @@ function QiniuJsSDK() {
699760
}));
700761
});
701762

702-
logger.log("bind ChunkUploaded event");
763+
logger.debug("bind ChunkUploaded event");
703764

704765
// bind 'Error' event
705766
// check the err.code and return the errTip
706767
uploader.bind('Error', (function(_Error_Handler) {
707768
return function(up, err) {
708-
logger.log("uploader Error");
769+
logger.error("Error event activated");
770+
logger.error("err: ", err);
709771
var errTip = '';
710772
var file = err.file;
711773
if (file) {
@@ -791,15 +853,15 @@ function QiniuJsSDK() {
791853
};
792854
})(_Error_Handler));
793855

794-
logger.log("bind Error event");
856+
logger.debug("bind Error event");
795857

796858
// bind 'FileUploaded' event
797859
// intercept the complete of upload
798860
// - get downtoken from downtoken_url if bucket is private
799861
// - invoke mkfile api to compose chunks if upload strategy is chunk upload
800862
uploader.bind('FileUploaded', (function(_FileUploaded_Handler) {
801863
return function(up, file, info) {
802-
logger.log("uploader Error");
864+
logger.debug("FileUploaded event activated");
803865

804866
var last_step = function(up, file, info) {
805867
if (op.downtoken_url) {
@@ -900,7 +962,14 @@ function QiniuJsSDK() {
900962
};
901963
})(_FileUploaded_Handler));
902964

903-
logger.log("bind FileUploaded event");
965+
logger.debug("bind FileUploaded event");
966+
967+
// init uploader
968+
uploader.init();
969+
970+
logger.debug("invoke uploader.init()");
971+
972+
logger.debug("init uploader end");
904973

905974
return uploader;
906975
};

0 commit comments

Comments
 (0)