您的位置:首页 > 移动开发 > Cocos引擎

cocos creator主程入门教程(五)—— 日志系统

2019-02-23 10:43 417 查看

这一篇介绍日志系统的设计。一般我们开发一个demo,只会简单的用cocos提供的cc.log打印下日志,方便调试功能。但是要开发一个商业项目,还要考虑怎么收集日志,方便产品上线后定位线上问题。如果线上产品运行出异常时能把当时的上下文日志发到一个文件服务器,有利于分析异常的原因。例如如果有通信数据日志,可以先判断是后端返回数据异常,还是前端逻辑出问题。因此,我会在项目里设计一个统一的日志系统,游戏里所有日志的打印都使用该日志系统进行打印。

首先对日志进行分级

1

2

3

4

5

6

7

8

9

/**

 
* 日志等级枚举

 
*/

export
 
enum
 
LogLv {

    
DEBUG = 0,

    
INFO,

    
WARN,

    
ERROR

}

  

腾讯云最新服务器活动--云服务器免费送。

试用领取有人能领到180天。

腾讯云领取优惠券地址

阿里云领取优惠券地址

调试和内部测试时打开所有等级的日志,上线后只打开info等级以上的日志。

产品上线后,日志需要缓存,在异常发生时进行上报

1

2

3

4

private
 
static
 
MAX_LEN: number = 5000;

private
 
static
 
CLEAR_COUNT: number = 1000;

 

private
 
static
 
logs: Array<LogInfo> = [];

  

这里设定一个清理的条数,当缓存达到上限,把指定条数的旧日志清理出去。当然也可以使用链表实现的队列或环形buffer缓存,达到上限后只替换一条。

每次调用打印方法时,根据设定的日志等级进行拦截,如果打印等级小于输出等级,不做输出。每个打印都可以添加tag,方便日志排查时根据模块定位问题。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

/**

 
* 收集、打印调试等级的日志

 
* @param tag

 
* @param msg

 
*/

public 
static
 
debug(tag: string, msg: string): void {

    
if
 
(Logger.level > LogLv.DEBUG) {

        
return
;

    
}

 

    
let
 
logMsg = 
"[DEBUG] ["
 
+ tag + 
"] "
 
+ msg;

    
Logger._addLog(LogLv.DEBUG, logMsg);

    
cc.log(logMsg);

}

  

日志缓存处理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

/**

     
* 添加缓存日志

     
* @param level

     
* @param logMsg

     
*/

    
private
 
static
 
_addLog(level: LogLv, logMsg: string): void {

        
if
 
(Logger.logs.length >= Logger.MAX_LEN) {

            
Logger.logs.splice(0, Logger.CLEAR_COUNT);

        
}

 

        
Logger.logs.push({

            
level: level,

            
msg: logMsg

        
});

    
}

  

对于网页版本,可以实现window.onerror方法,在这里把所有日志连接成字符串上传到日志文件服务器,实现对异常日志的收集上报。

 

日志系统先说到这里,下一篇我们将介绍下怎样做消息分发。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: