在游戏测试过程中我们可能会遇到有些偶发性的Bug不能复现,不能定位的问题,这就很尴尬了。
所以我们在这里实现一下实时记录游戏日志的功能。
记录日志,具体记些什么呢?不可能把每一步都记的很清楚,但是我们在开发过程中,每一步可能会打印一些特定的输出,我们就在输出上做一些手脚,把它的每一行都记录下来。
环境:Cocos2d-x quick
所以我们在这里实现一下实时记录游戏日志的功能。
记录日志,具体记些什么呢?不可能把每一步都记的很清楚,但是我们在开发过程中,每一步可能会打印一些特定的输出,我们就在输出上做一些手脚,把它的每一行都记录下来。
环境:Cocos2d-x quick
if DEBUG_MODE then
--把打印的log写入文件
LOG_FILE_NAME = "log_file.txt"
BACKUP_LOG_FILE_NAME = "backup_log_file.txt"
--如果之前写过文件就把之前的替换成备份
if io.exists(device.writablePath..LOG_FILE_NAME) then
--检查之前是否有备份
if io.exists(device.writablePath..BACKUP_LOG_FILE_NAME) then
--如果有备份则删掉备份
os.execute("rm "..device.writablePath..BACKUP_LOG_FILE_NAME)
end
--把之前的文件替换成备份文件
io.open(device.writablePath..BACKUP_LOG_FILE_NAME,'a+')
os.execute("mv " .. device.writablePath..LOG_FILE_NAME .. " " .. device.writablePath..BACKUP_LOG_FILE_NAME)
end
--新建一个新的空文件
print(os.execute("touch "..device.writablePath..LOG_FILE_NAME))
LOG_FILE_PATH = io.open(device.writablePath..LOG_FILE_NAME,'a+')
--重写print 让打印的东西能同时写入到文件里
old_print = print
print = function (...)
old_print(...)
--写入
if ... then
local args = {...}
local s = args[1]
if #args > 1 then
for i=2,#args do
s = s .. " | " .. args[i]
end
end
LOG_FILE_PATH:write(tostring(s).."\n")
LOG_FILE_PATH:flush()
end
end
end
记录Log的方法就到此为止了,DEBUG_MODE在开启的时候没写一行print都会向文件里写入一行。
下面说一下上传。
上传我们用了libcurl,因为在iOS和Android的系统中没有集成,所以不能直接调用os.execute(curl xxxxx)