Cocos独立游戏开发框架中的日志模块:Bug无所遁形

引言
本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。
在Cocos独立游戏开发框架中,一个强大的日志模块是不可或缺的组成部分。日志不仅仅是记录应用程序的运行状态,还可以用于故障排除、性能监测和安全审计。本文将探讨如何设计和实现一个高效的自定义日志模块,以满足开发框架的需要。
本文源码和源工程在文末获取,小伙伴们自行前往。
为什么需要自定义日志模块?
为什么不直接使用现有的日志库,如Cocos中的cc.log?尽管这些库在大多数情况下能够满足需求,但在自定义开发框架中,通常有一些特殊需求,需要更多的控制和定制化。以下是一些可能的理由:
- 集成性: 自定义日志模块可以更好地与开发框架的其他部分集成,以提供更一致的用户体验。
- 性能优化: 某些框架需要高性能的日志记录,而通用的日志库可能无法满足这些需求。自定义模块可以根据框架的性能要求进行优化。
- 定制化需求: 框架可能需要特定的日志格式、存储方式或级别,这些在通用库中可能无法轻松实现。
设计自定义日志模块
1. 确定需求和目标
在设计日志模块之前,首先需要明确框架的需求和目标。这些需求可能包括:
- 日志级别: 确定框架需要哪些日志级别,如DEBUG、INFO、WARNING、ERROR等。
- 日志格式: 定义日志记录的格式,包括时间戳、日志级别、消息内容等。
- 日志存储: 确定日志存储的方式,例如文件、数据库、远程服务器等。
- 性能要求: 确定框架对日志记录性能的要求,以便进行相应的优化。
2. 架构设计
设计日志模块的架构时,可以考虑以下关键组件:
- Logger: 这是主要的日志记录器,负责接收日志消息并将其分发到不同的输出目标。可以根据日志级别来过滤消息。
- Handler: 处理程序是负责将日志消息发送到不同输出目标的组件。可以有多个处理程序,如文件处理程序、控制台处理程序、网络处理程序等。
- Formatter: 格式化器负责将日志消息格式化为指定的格式,以便记录或展示。可以根据需要创建不同的格式化器。
3. 实现核心功能
在实现自定义日志模块的核心功能时,需要考虑以下步骤:
- 定义日志级别: 创建枚举或常量来表示不同的日志级别,并在Logger中实现相应的方法来处理每个级别的日志消息。
- 处理程序: 实现处理程序,根据配置将日志消息发送到不同的输出目标。例如,文件处理程序可以将消息写入文件,控制台处理程序可以将消息打印到控制台。
- 格式化器: 实现不同的格式化器,以满足框架的需求。格式化器可以包括时间戳、日志级别、消息内容等信息。
- 性能优化: 根据性能需求进行优化,可以使用缓冲区、异步日志记录等技术来提高性能。
4. 配置和集成
为了使日志模块易于使用和集成到开发框架中,可以考虑以下方面:
- 配置选项: 提供配置选项,允许开发人员根据需要调整日志模块的行为,如日志级别、输出目标等。
- 集成: 确保日志模块可以轻松集成到开发框架的其他部分,例如异常处理、事件记录等。
Log模块演示
1.定义Log模块
声明一下logLevel,这样我们就可以在不同的情况开启不同的log等级,比如说开发的时候是DEBUG级,上线后可以INFO或者ERROR级。

2.主接口
log模块的主接口,后续我们可以根据项目的需求,将接口升级改造成写本地文件或者通过http上传到服务器数据库。

3.log结构
log结构打包器,将log按照时间+log级别+log信息的结构输出。

4.log级别标识
根据log级别获取对应的log标识。

5.封装引擎log接口
最终写log的接口,不同的引擎调用其提供的log接口即可。

6.编写测试代码
有趣的独白。

7.结果演示

总结
在自定义开发框架中,设计和实现一个强大的日志模块是至关重要的。通过明确需求、设计架构、实现核心功能以及提供配置选项和集成能力,可以创建一个灵活、高效的日志系统,有助于开发人员更好地理解和维护应用程序。不仅如此,一个健壮的日志模块还有助于提高应用程序的可靠性和性能。因此,在自定义开发框架中,不要忽视日志模块的重要性。
本文的重点内容主要有以下几点,不知道小伙伴们是否已经理解:
- 本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。
- 为什么需要自定义日志模块。
- 如何设计自定义日志模块。
- 源码通过关注“亿元程序员”发送"Log"获取。
AD:笔者已经上线的小游戏《填色之旅》《贪吃蛇掌机经典》《重力迷宫球》大家可以自行点击搜索体验。
感兴趣的小伙伴记得关注"亿元程序员"哦,一位有着8年游戏行业经验的主程。学习游戏开发不迷路。感谢您的关注,希望能给到您帮助, 也希望通过您能帮助到大家。
喜欢的可以点个赞、点个在看哦!请把该文章分享给你觉得有需要的其他小伙伴。谢谢。
相关文章:
Cocos独立游戏开发框架中的日志模块:Bug无所遁形
引言 本系列是《8年主程手把手打造Cocos独立游戏开发框架》,欢迎大家关注分享收藏订阅。 在Cocos独立游戏开发框架中,一个强大的日志模块是不可或缺的组成部分。日志不仅仅是记录应用程序的运行状态,还可以用于故障排除、性能监测和安全审计…...
设计模式行为模式-命令模式
文章目录 前言定义结构工作原理优点适用场景消息队列模式Demo实现分写业务总结 前言 定义 命令模式(Command Pattern)是一种行为型设计模式,用于将请求封装为对象,从而使你可以使用不同的请求、队列或者日志请求来参数化其他对象…...
Linux-安装redis6.2.1及主备复制模式(replication)
Linux-安装redis6.2.1 下载redis6.2.1资源上传至安装目录解压及编译解压修改名称编译 修改配置文件主节点从节点 启动及测试启动主节点从节点 测试 下载redis6.2.1资源 地址》https://redis.io/download/ 上传至安装目录 例:/data/replication/ 解压及编译 解…...
新手做TikTok适合哪些类目?
现在很多小伙伴争先恐后想要在TikTok入驻,开店开直播带货赚钱,但是又怕自己是小白,不好拿捏这个平台。TikTok平台,适合小白做吗?现在tiktok千亿级的流量还处于蓝海阶段,想入局要趁早。那么肯定又有小伙伴疑…...
Open3D(C++) 点云格网分块
目录 一、算法概述二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法概述 点云格网分块是点云二维格网化的一个具体应用案例,与Open3D (C++) 使用点云创建数字高程模型DEM类似,对每个格…...
基于springboot跟redis实现的排行榜功能(实战)
概述 前段时间,做了一个世界杯竞猜积分排行榜。对世界杯64场球赛胜负平进行猜测,猜对1分,错误0分,一人一场只能猜一次。 1.展示前一百名列表。 2.展示个人排名(如:张三,您当前的排名106579)。 一.redis so…...
Mongodb常见操作命令
一、登录相关以及启动 启动服务mongodb: cd /usr/local/mongodb/bin ./mongod -f /data/mongodb/mongodb1.conf./mongod -f /data/mongodb/mongodb2.conf./mongod -f /data/mongodb/mongodb3.conf 登录mongodb数据库(mongodb默认端口:27017࿰…...
springcloud-nacos简述
Spring Cloud alibaba: nacos服务注册中心,配置中心 服务注册中心 1.项目父工程添加springcloudalibaba依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><ve…...
【SpringSecurity】十二、集成JWT搭配Redis实现退出登录
文章目录 1、登出的实现思路2、集成Redis3、认证成功处理器4、退出成功处理器5、修改token校验过滤器6、调试 1、登出的实现思路 这是目前的token实现图: 因为JWT的无状态,服务端无法在使用过程中主动废止某个 token,或者更改 token 的权限…...
Docker进入容器出现bash: vi: command not found
🎈1 参考文档 docker基础容器中bash: vi: command not found问题解决 | 你邻座的怪同学-CSDN 🔍2 问题描述 在使用 Docker 容器时,有时候里边没有安装vim,敲vim命令时提示说:vim: command not found。 这个时候就需要…...
Linux_6_文件查找与打包压缩
目录 文件查找与打包压缩1文件查找1.1 locate1.2 find1.2.1 指定搜索目录层级1.2.2对每个目录先处理目录内的文件,再处理目录本身1.2.3根据文件名和inode查找1.2.4 根据属主、属组查找1.2.5根据文件类型查找1.2.6空文件或目录1.2.7组合条件1.2.8 排除日录1.2.9根据文…...
JavaWeb_LeadNews_Day9-Redis实现用户行为
JavaWeb_LeadNews_Day9-Redis实现用户行为 网关配置点赞阅读不喜欢关注收藏文章详情-行为数据回显来源Gitee 网关配置 nacos: leadnews-app-gateway # 用户行为微服务 - id: leadnews-behavioruri: lb://leadnews-behaviorpredicates:- Path/behavior/**filters:- StripPrefi…...
IntelliJ IDEA2021.3.1 使用 MybatisCodeHelperPro插件
一、 下载 下载破解后的 MybatisCodeHelperPro 的 V3.2.2版本 V3.2.2-CSDN 或者 V3.2.2-Gitee 二、 应用 将下载下来的Zip文件 放到电脑上的某个位置 (最好放在Idea 管理插件的 plugins 下) 然后自从搜索 Idea如何从磁盘中应用插件 三、激活 由于已经破解过了 但是还是需要激活…...
el-date-picker 等 点击无反应不回显问题解决
如上图,编辑回显正常,但是时间控件在拖动过程中时间不会跟随改变。 解决办法: <el-date-picker input"onInput()" ...><el-input input"onInput()" ...>js中onInput() {this.$forceUpdate();},...
Ansible学习笔记12
playbook: playbook(剧本):是ansible用于配置、部署和管理被控节点的剧本,用于Ansible操作的编排。 使用的是yaml格式,(saltstack、elk、docker、docker-compose、k8s都会使用到yaml格式。&am…...
sqlmap中文文档
这是 sqlmap -hh的翻译,后续可能会对参数进行详细的示例 sqlmap 普通选项 -h, --help # 显示基本帮助信息并退出 -hh # 详细帮助信息 --versino # 版本 -v # 日志详细级别 0-60:只显示python错误以及严重的信息。1:同时显示基本信…...
【C++模拟实现】vector的模拟实现
【C模拟实现】vector的模拟实现 目录 【C模拟实现】vector的模拟实现vector模拟实现的标准代码vector模拟实现中的要点insert和erase会涉及到迭代器失效的问题vector深度剖析关于模版template< class InputIterator >使用memcpy拷贝问题 作者:爱写代码的刚子 …...
go学习part21(3)redis连接池
连接池 1.介绍 每次使用数据就就建立链接再关闭可以,但是如果有大量客户端频繁请求连接,大量创建连接和关闭会非常耗费资源。 所以就建立一个连接池,里面存放几个不关闭的连接,谁要用就分配给谁。 说明:通过Golang 对 Redis操…...
乐理-笔记
乐理笔记整理 1、前言2、认识钢琴键盘及音名3、升降号、还原号4、如何区分同一音名的不同键?5、各类音符时值的关系6、歌曲拍号7、拍号的强弱规律8、歌曲速度(BPM)9、附点音符10、三连音12、唱名与简谱数字13、自然大调(白键&…...
java八股文面试[数据库]——B树和B+树的区别
B树是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(logn)的时间复杂度进行查找、顺序读取、插入和删除等操作。 1、B树的特性 B树中允许一个结点中包含多个key,可以是3个、4个、5个甚至更多,并不确定,需要看具体的实…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
【OSG学习笔记】Day 18: 碰撞检测与物理交互
物理引擎(Physics Engine) 物理引擎 是一种通过计算机模拟物理规律(如力学、碰撞、重力、流体动力学等)的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互,广泛应用于 游戏开发、动画制作、虚…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
