当前位置: 首页 > news >正文

cocos2d-lua:将打印的Lua日志写入本地文件

写入文件

自定义一个打印Log的函数,在调用这个函数进行Log打印的时候,会调用io.writefile使用追加的方式将Log信息写入到本地文件中!

-- 将日志信息写入文件中
function writeLog2File(msg)
	if cc.Application:getInstance():getTargetPlatform() == cc.PLATFORM_OS_WINDOWS then  -- win
		local logFilePath = cc.FileUtils:getInstance():getWritablePath() .. "debug_log.txt"
		-- functions.lua中的io.writefile,见附录Ⅰ
		io.writefile(logFilePath , string.format("%s: %s\n", os.date(), msg), "a+")  -- "a+":追加
	end
end

-- 自定义print
function printLog(msg, ...)
	msg = msg .. " "
	local args = {...}
	for _, arg in pairs(args) do
		msg = msg .. tostring(arg) .. " "
	end
	print(msg) -- CCLuaStack.cpp中的lua_print,见附录Ⅱ

	writeLog2File(msg)
end

删除文件

在应用启动或者其他合适的时候删除本地日志文件,控制日志文件的生命周期,否则会一直追加新的Log信息!

-- 删除本地文件
function deleteLogFile()
    if cc.Application:getInstance():getTargetPlatform() ~= cc.PLATFORM_OS_WINDOWS then return end
    local logFilePath = cc.FileUtils:getInstance():getWritablePath() .. "debug_log.txt"
	local isExist = cc.FileUtils:getInstance():isFileExist(logFilePath)
	if isExist then
        cc.FileUtils:getInstance():removeFile(logFilePath)
    end
end

附录Ⅰ

--[[
	io操作:将内容写入文件
	@param path 目标文件路径,文件不存在会自动创建
	@param content 写入的内容
	@param mode 写入的模式
	@return 写入结果
]]

function io.writefile(path, content, mode)
    mode = mode or "w+b"
    local file = io.open(path, mode)
    if file then
        if file:write(content) == nil then return false end
        io.close(file)
        return true
    else
        return false
    end
end

附录Ⅱ

int lua_print(lua_State * luastate)
{
    int nargs = lua_gettop(luastate);  // lua_gettop:返回栈顶元素的索引(即栈长度)

    std::string t;
    for (int i=1; i <= nargs; i++)
    {
        if (lua_istable(luastate, i))
            t += "table";
        else if (lua_isnone(luastate, i))
            t += "none";
        else if (lua_isnil(luastate, i))
            t += "nil";
        else if (lua_isboolean(luastate, i))
        {
            if (lua_toboolean(luastate, i) != 0)
                t += "true";
            else
                t += "false";
        }
        else if (lua_isfunction(luastate, i))
            t += "function";
        else if (lua_islightuserdata(luastate, i))
            t += "lightuserdata";
        else if (lua_isthread(luastate, i))
            t += "thread";
        else
        {
            const char * str = lua_tostring(luastate, i);
            if (str)
                t += lua_tostring(luastate, i);
            else
                t += lua_typename(luastate, lua_type(luastate, i));
        }
        if (i!=nargs)
            t += "\t";
    }
    CCLOG("[LUA-print] %s", t.c_str());

    return 0;
}

Just Mark!

相关文章:

  • devhook 0.46 psp1.5 模拟2.71
  • Lua错误处理之error、assert、pcall和xpcall
  • PSP完美显示中文歌曲名的方法
  • Lua之元表和元方法
  • 30分钟搞定BASH脚本编程[zz]
  • Lua之面向对象的实现
  • 不同种类的webservice错误信息
  • Lua中的require与package.loaded
  • 配置文件多个一个符号,导致struts抛出了匪夷所思的错误
  • 签名不对,请检查签名是否与开发平台上填写的一致
  • win终端工具Cmder的配置与使用
  • hibernate的lazy配置引起的问题
  • Lua实战之table.remove
  • 老婆说明书
  • cocos2d-lua:改变子节点优先级reorderChild
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • interface和setter,getter
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS | NSProxy
  • Javascript设计模式学习之Observer(观察者)模式
  • Promise面试题,控制异步流程
  • python3 使用 asyncio 代替线程
  • Redis在Web项目中的应用与实践
  • 翻译--Thinking in React
  • 汉诺塔算法
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 批量截取pdf文件
  • 如何设计一个微型分布式架构?
  • 学习HTTP相关知识笔记
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 原生js练习题---第五课
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (day6) 319. 灯泡开关
  • (ZT)薛涌:谈贫说富
  • (八十八)VFL语言初步 - 实现布局
  • (补)B+树一些思想
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (南京观海微电子)——COF介绍
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (转)socket Aio demo
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET/C# 解压 Zip 文件时出现异常:System.IO.InvalidDataException: 找不到中央目录结尾记录。
  • .Net面试题4
  • :中兴通讯为何成功
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @EnableWebSecurity 注解的用途及适用场景
  • [ C++ ] 类和对象( 下 )
  • [ NOI 2001 ] 食物链
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [Android]How to use FFmpeg to decode Android f...