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

五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑。本系列文章以TypeScript为介绍语言。

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

首先对日志进行分级

/**
 * 日志等级枚举
 */
export enum LogLv {
    DEBUG = 0,
    INFO,
    WARN,
    ERROR
}

  

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

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

    private static MAX_LEN: number = 5000;
    private static CLEAR_COUNT: number = 1000;

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

  

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

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

    /**
     * 收集、打印调试等级的日志
     * @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);
    }

  

日志缓存处理

/**
     * 添加缓存日志
     * @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方法,在这里把所有日志连接成字符串上传到日志文件服务器,实现对异常日志的收集上报。

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

原文地址:https://www.cnblogs.com/niudanshui/p/10421567.html

时间: 2024-07-30 19:34:55

cocos creator主程入门教程(五)—— 日志系统的相关文章

cocos creator主程入门教程(一)—— 初识creator

四邑隐侠,本名关健昌,10年游戏生涯,现隐居四邑.本系列文章以TypeScript为介绍语言. 我们在cocos creator新建一个Hello TypeScript项目,都会有一个assets/Scene/helloworld.fire文件.使用cocos creator开发游戏时,项目可以只有一个.fire文件.一般地,我会把这个文件夹改名为assets/scene,下面只有main.fire文件:assets/scene/main.fire. 双击main.fire文件,在层级管理器可以

cocos creator主程入门教程(四)—— 网络通信

五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 前面已经介绍怎样加载资源.管理弹窗.开发一个网络游戏,难免要处理网络通信.有几点问题需要注意: 1.服务端为了快速开发可能前期使用http通信,后面再改成websocket/socket. 2.同时存在http和websocket/socket通信 3.通信数据格式可能需要随时替换为json或protocol buffer,可能需要添加额外头部. 4.在新手引导里使用本地数据做模拟,请求不需要发送给后

cocos creator主程入门教程(八)—— 代码结构

五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇简单介绍下代码结构,清晰的代码结构更有利于团队对项目的理解和维护. 1.前面我们介绍了一系列基础功能封装,这部分内容可以被不同的游戏重用.这一部分代码都可以放到framework目录下. 2.游戏业务代码统一放到game目录下 3.平台sdk接入代码放到channel目录下 4.数据上报的sdk接入代码放到report目录下. StartCtrl是项目的入口,负责项目的初始化,包括渠道sdk.数

cocos creator主程入门教程(十一)—— 行为树

五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 本篇介绍行为树.在RPG游戏中,地图上存在一些剧情NPC,不同的剧情下,NPC的行为会不一样.这些NPC的行为可以通过行为树进行管理.行为树是在固有行为集下,进行行为抉择的AI算法.行为树包括数据解析.逻辑控制.行为执行三部分. 行为树数据由节点组成,每个节点有对应的行为类型.参数.返回值.节点有一个子节点数组,通过这种方式将节点组织成树状. export class BehaviorNode { p

linux入门教程(五) Linux系统的远程登录

首先要说一下,该部分内容对于linux初学者来讲并不是特别重要的,可以先跳过该章节,先学下一章,等学完后再回来看这一章. Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在IDC机房的,所以我平时登录linux系统都是通过远程登录的.Linux系统中是通过ssh服务实现的远程登录功能.默认ssh服务开启了22端口,而且当我们安装完系统时,这个服务已经安装,并且是开机启动的.所以不需要我们额外配置什么就能直接远程登录linux系统.ssh服务的配置文件为 /etc/ssh/

RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe)

原文:RabbitMQ入门教程(五):扇形交换机发布/订阅(Publish/Subscribe) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78628659 分享一个朋友的人工智能教程.比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. 简介 本节主要演示交换机的广播类型fanout,广播类型不需要routingKey,交换机会将所有

Elasticsearch入门教程(五):Elasticsearch查询(一)

原文:Elasticsearch入门教程(五):Elasticsearch查询(一) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79228852 // 准备数据 PUT /shop/goods/1 { "name": "2017新款女装冬季外套ulzzang棉袄中长款棉衣韩版百搭棉服面包服", &quo

无废话ExtJs 入门教程五[文本框:TextField]

无废话ExtJs 入门教程五[文本框:TextField] extjs技术交流,欢迎加群(201926085) 继上一节内容,我们在表单里加了个两个文本框.如下所示代码区的第42行位置,items: [txtusername, txtpassword]. 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xht

Spring Cloud 入门教程(五): Ribbon实现客户端的负载均衡

接上节,假如我们的Hello world服务的访问量剧增,用一个服务已经无法承载, 我们可以把Hello World服务做成一个集群. 很简单,我们只需要复制Hello world服务,同时将原来的端口8762修改为8763.然后启动这两个Spring Boot应用, 就可以得到两个Hello World服务.这两个Hello world都注册到了eureka服务中心.这时候再访问http://localhost:8761, 可以看到两个hello world服务已经注册.(服务与注册参见Spr