在实际开发过程中,代码日志是必不可少的系统,尤其是在线上版本中,对于查找问题相当有帮助。但是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 日志系统相关推荐

  1. cocos2d-x lua 学习笔记(1) -- 环境结构

    Cocos2d-x 3.0超过环境的版本号来建立和前Cocos2d-x 2.0 差异较大的版本,从同时Cocos2d-x 3.0项目打包成apkAndroid的应用程序文件,步骤,构建环境有些乏味安德 ...

  2. Android动态日志系统Holmes

    背景 美团点评公司是全球领先的一站式生活服务平台,为6亿多消费者和超过450万优质商户提供连接线上线下的电子商务网络.美团点评的业务覆盖了超过200个丰富品类和2800个城区县网络,在餐饮.外卖.酒店 ...

  3. cocos2d-x lua 学习笔记(1) -- 环境搭建

    Cocos2d-x 3.0以上版本的环境搭建和之前的Cocos2d-x 2.0 版差异较大的,同时从Cocos2d-x 3.0项目打包成apk安卓应用文件,搭建安卓环境的步骤有点繁琐,但搭建一次之后, ...

  4. Cocos2dx Lua开发环境搭建

    本文记录在 Windows 下搭建 cocos2dx lua 开发环境,还有调试设置. 系统:Windows 7 64 IDE:Mircrosoft Visual Studio 2013 Cocos2 ...

  5. linux 任务计划 权限设置,Linux系统 文件权限+计划任务+日志系统

    实验目的:熟练掌握权限相关概念和具体操作 实验环境:Red Hat Enterprise Linux Server 5.3 实验步骤: 一.文件权限 二.计划任务 三.日志 一.文件权限 (一)基本权 ...

  6. 日志系统新贵Loki,确实比笨重的ELK轻

    来自:CSDN(作者:linkt1234) 原文链接: https://blog.csdn.net/Linkthaha/article/details/100575278 最近,在对公司容器云的日志方 ...

  7. cx_oracle写日志信息_日志系统的设计

    笔者在写作本章节的时候,并不敢把此章节的标题叫做<高性能日志系统的设计>,之所以不敢加上"高性能"三个字的原因是: 第一,我对于日志系统设计知识和经验都来自于学习和工作 ...

  8. 抛弃ELK!Loki日志系统详解!

    背景 最近,在对公司容器云的日志方案进行设计的时候,发现主流的ELK或者EFK比较重,再加上现阶段对于ES复杂的搜索功能很多都用不上最终选择了Grafana开源的Loki日志系统,下面介绍下Loki的 ...

  9. 百亿级日志系统架构设计及优化

    作者:杨津萍,大数据架构师,从业十余年,专攻 Web 架构及大数据架构. 来自:51cto技术栈(ID:blog51cto) " 日志数据是最常见的一种海量数据,以拥有大量用户群体的电商平台 ...

最新文章

  1. 为什么不用简书写文章
  2. STL 之map,multimap
  3. CF1415E New Game Plus(贪心)
  4. linux中vi模式中c命令,“Linux”系统中“vi ^C ”命令是什么意思?
  5. java完成登录页面+连接数据库
  6. mt管理器图片在哪个文件夹_MT管理器构造(新手小白教程)-小白文件管理器
  7. Redhat克隆及其配置
  8. opencv matlab配置,MATLAB配置mexopencv
  9. RTX服务器信息存档,Rtx/RTX服务器端基本应用(一)
  10. MongoDB4.2.0安装包并配上安装教程
  11. gravity和layout_gravity的区别(有时使用layout_gravity=center时失效的原因)
  12. python导入mat文件_从.mat文件导入复杂数据作为numpy数组
  13. 项目经理版《野狼disco》
  14. 网课查题公众号 对接查题题库
  15. 2023最新红盟云卡开源发卡网站源码+功能很强大
  16. css多边形制作简历小标题二级标题
  17. 上手评测国内第一的华为云桌面,企业远程安全办公首选
  18. PT100/PT1000温度采集电路方案
  19. 政府会计的概念、政府会计标准体系、政府会计的特点(会形成小考点)、政府会计要素及其确认和计量、政府预算会计要素、政府财务会计要素
  20. 不忘初心,砥砺前行!

热门文章

  1. Rhinoceros 7 for Mac(犀牛7 mac版)
  2. python极简课程系列-控制结构
  3. C语言:计算2的50次方需要多久?
  4. 论呼叫中心的三种模式
  5. 以 Mapbox Terrian-RGB 模型发布高程数据
  6. linux命令-mkdir-rmdir-cd
  7. Modbus / BACnet IP 网关BAM-360
  8. posix官方文档在线网站
  9. 视频码率,帧率和分辨率的联系与区别
  10. frameset框架导航