五邑隐侠,本名关健昌,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方法,在这里把所有日志连接成字符串上传到日志文件服务器,实现对异常日志的收集上报。

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

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

  1. cocos creator主程入门教程(七)—— MVC架构

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心Wo ...

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

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 我们在cocos creator新建一个Hello TypeScript项目,都会有一个assets/S ...

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

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 前面已经介绍怎样加载资源.管理弹窗.开发一个网络游戏,难免要处理网络通信.有几点问题需要注意: 1.服务 ...

  4. cocos creator主程入门教程(二)—— 弹窗管理

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 我们已经知道怎样制作.加载.显示界面.但cocos没有提供一个弹窗管理模块,对于一个多人合作的项目,没有 ...

  5. cocos creator主程入门教程(三)—— 资源管理

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 在初识篇,我介绍过怎样加载prefab.cocos提供了一系列的加载接口,包括cc.loader.loa ...

  6. cocos creator主程入门教程(十一)—— 有限状态机和行为树

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 本篇介绍有限状态机和行为树.有限状态机用于有限的状态下的AI,由于同时只能处于一个状态,多个状态需要多个 ...

  7. cocos creator主程入门教程(十)—— A*寻路

    摘要: 五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍A*寻路算法.在RPG.SLG.模拟经营类游戏,有需要给角色寻路的需求,一般寻路我们采 ...

  8. cocos creator主程入门教程(九)—— 瓦片地图

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇介绍瓦片地图,在开发模拟经营类游戏.SLG类游戏.RPG游戏,都会使用到瓦片地图.瓦片地图地面是通 ...

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

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇简单介绍下代码结构,清晰的代码结构更有利于团队对项目的理解和维护. 1.前面我们介绍了一系列基础功 ...

随机推荐

  1. BZOJ_2599_[IOI2011]Race_点分治

    BZOJ_2599_[IOI2011]Race_点分治 Description 给一棵树,每条边有权.求一条简单路径,权值和等于K,且边的数量最小.N <= 200000, K <= 10 ...

  2. solr6.6 导入索引数据

    1.什么是core core是solr的一个索引库,可以理解为一个数据库,core可以根据需要,创建多个. 2.创建core 例如,创建一个core,名字叫mycore,就可以用一下命令: E:\so ...

  3. JavaWeb学习总结(转载)

    JavaWeb学习总结(五十三)--Web应用中使用JavaMail发送邮件      JavaWeb学习总结(五十二)--使用JavaMail创建邮件和发送邮件     JavaWeb学习总结(五十 ...

  4. 前端教程(1)http协议的深刻理解

    一 HTTP协议简介 作为学习前端开发的开始,我们必须搞明白以下几件事 1.什么是互联网      互联网=物理连接介质+互联网协议     2.互联网建立的目的? 数据传输打破地域限制,否则的话,我 ...

  5. Django解决跨域问题

    原理:浏览器的同源策略,其实我们的请求发送过去了,服务器也进行响应了,就是浏览器把响应给阻止响应而已 第一种方法jsonp 因为浏览器不对 <script> 标签里面的src属性进行阻止, ...

  6. [翻译 EF Core in Action 1.6]你的第一个EF Core应用程序

    Entity Framework Core in Action Entityframework Core in action是 Jon P smith 所著的关于Entityframework Cor ...

  7. 用wGenerator给编程提速

    1.需求设定 开发语言: java 数据库: mysql 持久化: mybatis 模式: mvc 视图引擎: thymeleaf 前端框架: bootstrap4 用以上的组合来开发一个公告管理的列 ...

  8. 004. 前端跨域资源请求: JSONP/CORS/反向代理

    1.什么是跨域资源请求? https://www.cnblogs.com/niuli1987/p/10252214.html 同源: 如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有 ...

  9. react-native 金币彩带雨下落动画

    日常项目中,经常遇到一些表情雨/金币雨/彩带雨 等下落的动画,之前做android原生的时候,写过类似的效果,主要通过自定义view 在onDraw里绘制下落的过程,具体可以看下我的这篇github地 ...

  10. 关于linux上postgresql的一些理解

    刚开始接触postgresql,安装后就有一个默认用户postgres,而且在启动postgresql后只能通过切换到linux的postgres用户才能登录数据库进行操作,和Mysql的登录认证居然 ...