在游戏开发中,调试代码不仅仅要靠断点调试,也需要日志输出帮助调试!此时,我们希望日志能够打赢出各种各样的颜色,来区分不同的错误信息,也需要知道该日子打印的时间和文件的代码行数,以及函数的调用者,等等。

1.获取日志打印时间

   _getDateString() {
        var d = new Date();
        var str = d.getHours()+"";
        var timeStr = "";
        timeStr += (str.length==1 ? ("0"+str) : str) + ":";
        str = d.getMinutes()+"";
        timeStr += (str.length==1 ? ("0"+str) : str) + ":";
        str = d.getSeconds()+"";
        timeStr += (str.length==1 ? ("0"+str) : str) + ".";
        str = d.getMilliseconds()+"";
        if( str.length==1 ) str = "00"+str;
        if( str.length==2 ) str = "0"+str;
        timeStr += str;
        timeStr = "[" + timeStr + "]";
        return timeStr;
    }

2.获取调用堆栈

_stack(index) {
        var e = new Error();
        var lines = e.stack.split("
");
        lines.shift();
        var result = [];
        lines.forEach(function (line) {
            line = line.substring(7);
            var lineBreak = line.split(" ");
            if (lineBreak.length<2) {
                result.push(lineBreak[0]);
            } else {
                result.push({[lineBreak[0]] : lineBreak[1]});
            }
        });
        var list = [];
        if(index <= result.length-1){
            for(var a in result[index]){
                list.push(a);
            }
        }
        if( list.length > 0 ) {
            var splitList = list[0].split(".");
            if( splitList.length >=2 ) {
                return ("["+splitList[0] + ".js->" + splitList[1] + "]");
            }
        }
        return "";
    }

3. 基本日志输出封装

 log(msg?: string){
        var backLog = cc.log || console.log ||  window["log"];
        if(!AppLog.OPEN_LOG_FLAG){
            return;
        }
        backLog.call(this,"%s%s "+cc.js.formatStr.apply(cc,arguments),this._getDateString(),this._stack(2));
    };
    info(msg?: string) {
        var backLog = cc.log || console.log ||   window["log"];
        if(!AppLog.OPEN_LOG_FLAG){
            return;
        }
        backLog.call(this,"%c%s%s "+cc.js.formatStr.apply(cc,arguments),"color:#00CD00;",this._getDateString(),this._stack(2));
    };
    logS(msg?: string) {
        var backLog = cc.log || console.log ||   window["log"];
        if(!AppLog.OPEN_LOG_FLAG){
            return;
        }
        backLog.call(this,"%c%s%s "+cc.js.formatStr.apply(cc,arguments),"color:#0066FF;",this._getDateString(),this._stack(2));
    };

4. framework 初始化日志模块。

import AppLog from "./AppLog";
(bb as any) = AppLog.getInstance();

5. 使用日志

   bb.log("这是普通日志: hello world");
   bb.info("这是重要的日志: hello world");
   bb.logS("这是服务器传过来的日志: hello world");
   bb.logC("这是发给服务器的日志: hello world");
   bb.err("这是错误日志输出:hello world");
   bb.warn("这是警告日志:hello wolrd")