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个甚至更多,并不确定,需要看具体的实…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...
蓝桥杯 2024 15届国赛 A组 儿童节快乐
P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡,轻快的音乐在耳边持续回荡,小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下,六一来了。 今天是六一儿童节,小蓝老师为了让大家在节…...

HBuilderX安装(uni-app和小程序开发)
下载HBuilderX 访问官方网站:https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本: Windows版(推荐下载标准版) Windows系统安装步骤 运行安装程序: 双击下载的.exe安装文件 如果出现安全提示&…...
大学生职业发展与就业创业指导教学评价
这里是引用 作为软工2203/2204班的学生,我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要,而您认真负责的教学态度,让课程的每一部分都充满了实用价值。 尤其让我…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...