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 } |
腾讯云最新服务器活动--云服务器免费送。
调试和内部测试时打开所有等级的日志,上线后只打开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方法,在这里把所有日志连接成字符串上传到日志文件服务器,实现对异常日志的收集上报。
日志系统先说到这里,下一篇我们将介绍下怎样做消息分发。
相关文章推荐
- Java日志学习六:各种日志系统间的桥接
- Postgresql日志系统的实现(二)
- 从零开始,搭建博客系统MVC5+EF6搭建框架(3),添加Nlog日志、缓存机制(MemoryCache、RedisCache)、创建控制器父类BaseController
- 系统日志中的Mark
- 【python】日志系统
- Log4j日志管理系统简单使用说明
- Log4j日志管理系统简单使用说明
- ELK日志收集系统调研(三) -- LogStash常用配置
- C#控制台 系统日志
- java--IO流-LineNumberReader,读取键盘录入,字符字节流转换,改变标准输入输出设备,异常的日志信息,系统信息
- PowerShell中使用Get-EventLog读取、筛选系统日志的例子
- log4j【5】( log4j日志异步化大幅提升系统性能 )
- Linux学习第三十四篇:rsync通过服务同步,Linux系统日志,screen工具
- tomcat 日志分析系统awstats(linux和windows)
- Linux 日志文件系统 详细介绍
- 日志系统之HBase日志存储设计优化
- .net下读写系统日志
- SLF4j、log4j管理系统日志(Maven)
- 基于Flume的美团日志收集系统(一)
- ELK日志监控系统搭建