cocos2dx lua 日志系统
在实际开发过程中,代码日志是必不可少的系统,尤其是在线上版本中,对于查找问题相当有帮助。但是cocos2dx lua的代码日志是基于lua的print打印,只写在console中,不会长久保存。怎么办,那么我们来设计一个简单的日志系统,让日志保存下来。
话不多说,直接上代码:(添加了注释)
local LogManager = class('LogManager')local socketOk = nil
local socket = nillocal logfilepath = nilfunction LogManager:ctor()-- 存储日志的文件地址logfilepath = cc.FileUtils:getInstance():getWritablePath() .. 'log.txt'-- 检查是否使用了socket库(该库主要用于获取精确时间)socketOk, socket = pcall(function()return require("socket")end)
endfunction LogManager.writefile(...)local time = nilif socketOk thentime = socket.gettime() -- 取更加准确的时间(socket时间精确到毫秒)elsetime = os.time() -- lua提供的时间精确到秒end-- 标记日志打印的时间local timestr = string.format("[%s %s]", os.date("%Y-%m-%d %H:%M:%S", time), math.floor(time*1000)%1000)-- 写io.writefile(logfilepath, timestr .. tostring(...) .. "\n", "a")
endfunction LogManager.log( ... )local temp = ...if not temp thenLogManager.log('nil')returnendprint(tostring(...))LogManager.writefile(temp)
end-- 全局记录单文本方法
cc.exports.blog = function( tag, ... )if tag and ... thenLogManager.log('[' .. tag .. ']' .. string.format(...))elseLogManager.log(tag)end
end-- 全局记录表结构数据日志方法(需要用到cjson库)
cc.exports.bdump = function( tag, data )local strData = cjson.encode(data)log(tag, strData)
endcc.exports.LogManager = cc.exports.LogManager or LogManager:create()
return cc.exports.LogManager
未做的事情:
1、如果是在android手机上,可以在Android底层提供一个接口,将写日志的文件转移到手机可查看的目录中,这样就方便调取手机日志,如:(IOS没有这个真香功能。)
public static String getSdCardPath() {String sdDir = "";boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);if (sdCardExist) {sdDir = Environment.getExternalStorageDirectory().getPath();File file = new File(sdDir + "/123");if (!file.exists()) {file.mkdir();}return file.getAbsolutePath();}return "";
}
2、日志文件大小控制,每次在启动APP时,查询下当前日志文件的大小:(function.lua提供),如果大于设定的值就清除日志
function io.filesize(path)local size = falselocal file = io.open(path, "r")if file thenlocal current = file:seek()size = file:seek("end")file:seek("set", current)io.close(file)endreturn size
end
3、动态上传日志:
架设一组接收日志文件的服务器,在游戏内提供一个反馈接口,在有需要的时候,让玩家将日志文件发送上来。
function LogManager.commitLog(logname)local logurl = "http://www.baidu.com/xxx"local xhr = cc.XMLHttpRequest:new()xhr.responseType = cc.XMLHTTPREQUEST_RESPONSE_JSON --设置返回数据格式为字符串xhr:open("POST", logurl) --设置请求方式 GET 或者 POSTxhr:setRequestHeader("Content-Type","application/octet-stream")xhr:setRequestHeader("Accept-Encoding"," ")local function onReadyStateChange() --请求响应函数if xhr.readyState == 4 and (xhr.status >= 200 and xhr.status < 207) then --请求状态已完并且请求已成功blog("日志上传成功。")elseblog("日志上传失败。")endxhr:unregisterScriptHandler()endxhr:registerScriptHandler(onReadyStateChange) --注册请求响应函数local filesize = io.filesize(logFilePath)local file = io.open(logFilePath, "rb")local logFileData = file:read("*a")io.close(file)xhr:setRequestHeader("Content-Length",tostring(filesize))xhr:setRequestHeader("ContentLength",tostring(filesize))xhr:send(logFileData) --最后发送请求
end
4、日志分级:要给日志系统设定一些等级,根据不同的等级选择保留哪些日志,在线上版本中应当尽量减少日志的读写,IO操作还是非常耗时间的,特别是对于table的处理。当然本份代码中没有体现这一功能。需要各位自己去摸索实现。
以上这些代码还需要整合起来,就形成了一个功能比较简单的日志系统了,在实际使用过程中,对开发和后期维护的作用还是非常巨大的。希望对大家的学习和使用帮助。
cocos2dx lua 日志系统相关推荐
- cocos2d-x lua 学习笔记(1) -- 环境结构
Cocos2d-x 3.0超过环境的版本号来建立和前Cocos2d-x 2.0 差异较大的版本,从同时Cocos2d-x 3.0项目打包成apkAndroid的应用程序文件,步骤,构建环境有些乏味安德 ...
- Android动态日志系统Holmes
背景 美团点评公司是全球领先的一站式生活服务平台,为6亿多消费者和超过450万优质商户提供连接线上线下的电子商务网络.美团点评的业务覆盖了超过200个丰富品类和2800个城区县网络,在餐饮.外卖.酒店 ...
- cocos2d-x lua 学习笔记(1) -- 环境搭建
Cocos2d-x 3.0以上版本的环境搭建和之前的Cocos2d-x 2.0 版差异较大的,同时从Cocos2d-x 3.0项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后, ...
- Cocos2dx Lua开发环境搭建
本文记录在 Windows 下搭建 cocos2dx lua 开发环境,还有调试设置. 系统:Windows 7 64 IDE:Mircrosoft Visual Studio 2013 Cocos2 ...
- linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统
实验目的:熟练掌握权限相关概念和具体操作 实验环境:Red Hat Enterprise Linux Server 5.3 实验步骤: 一.文件权限 二.计划任务 三.日志 一.文件权限 (一)基本权 ...
- 日志系统新贵Loki,确实比笨重的ELK轻
来自:CSDN(作者:linkt1234) 原文链接: https://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云的日志方 ...
- cx_oracle写日志信息_日志系统的设计
笔者在写作本章节的时候,并不敢把此章节的标题叫做<高性能日志系统的设计>,之所以不敢加上"高性能"三个字的原因是: 第一,我对于日志系统设计知识和经验都来自于学习和工作 ...
- 抛弃ELK!Loki日志系统详解!
背景 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的 ...
- 百亿级日志系统架构设计及优化
作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...
最新文章
- 为什么不用简书写文章
- STL 之map,multimap
- CF1415E New Game Plus(贪心)
- linux中vi模式中c命令,“Linux”系统中“vi ^C ”命令是什么意思?
- java完成登录页面+连接数据库
- mt管理器图片在哪个文件夹_MT管理器构造(新手小白教程)-小白文件管理器
- Redhat克隆及其配置
- opencv matlab配置,MATLAB配置mexopencv
- RTX服务器信息存档,Rtx/RTX服务器端基本应用(一)
- MongoDB4.2.0安装包并配上安装教程
- gravity和layout_gravity的区别(有时使用layout_gravity=center时失效的原因)
- python导入mat文件_从.mat文件导入复杂数据作为numpy数组
- 项目经理版《野狼disco》
- 网课查题公众号 对接查题题库
- 2023最新红盟云卡开源发卡网站源码+功能很强大
- css多边形制作简历小标题二级标题
- 上手评测国内第一的华为云桌面,企业远程安全办公首选
- PT100/PT1000温度采集电路方案
- 政府会计的概念、政府会计标准体系、政府会计的特点(会形成小考点)、政府会计要素及其确认和计量、政府预算会计要素、政府财务会计要素
- 不忘初心,砥砺前行!