cococos 2 dx lua開発デバッグロゴ方式
4489 ワード
local platform = cc.Application:getInstance():getTargetPlatform()
local plats = {
WINDOWS = 0,
LINUX = 1,
MAC = 2,
ANDROID = 3,
IPHONE = 4,
IPAD = 5,
BLACKBERRY = 6,
NACL = 7,
EMSCRIPTEN = 8,
TIZEN = 9,
WINRT = 10,
WP8 = 11,
}
local count = 0
local LEVEL =
{
["DEBUG"] = 1,
["INFO" ] = 2,
["WARN" ] = 3,
["ERROR"] = 4,
}
local IS_OPEN = {
[LEVEL.DEBUG] = platform == plats.WINDOWS,
[LEVEL.INFO] = platform == plats.WINDOWS,
[LEVEL.WARN] = platform == plats.WINDOWS,
[LEVEL.ERROR] = platform == plats.WINDOWS,
}
local function Filter(t, name, indent)
local tableList = {}
local function table_r (t, name, indent, full)
local id = not full and name or type(name)~="number" and tostring(name) or '['..name..']'
local tag = indent .. id .. ' = '
local out = {}
if type(t) == "table" then
if tableList[t] ~= nil then
table.insert(out, tag .. '{} -- ' .. tableList[t] .. ' (self reference)')
else
tableList[t]= full and (full .. '.' .. id) or id
if next(t) then
table.insert(out, tag .. '{')
for key,value in pairs(t) do
table.insert(out,table_r(value,key,indent .. ' ',tableList[t]))
end
table.insert(out,indent .. '}')
else table.insert(out,tag .. '{}') end
end
else
local val = type(t)~="number" and type(t)~="boolean" and '"'..tostring(t)..'"' or tostring(t)
table.insert(out, tag .. val)
end
return table.concat(out, '
')
end
return table_r(t,name or 'Value',indent or '')
end
local function Dump(obj)
local getIndent, quoteStr, wrapKey, wrapVal, dumpObj
getIndent = function(level)
return string.rep("\t", level)
end
quoteStr = function(str)
return '"' .. string.gsub(str, '"', '\\"') .. '"'
end
wrapKey = function(val)
if type(val) == "number" then
return "[" .. val .. "]"
elseif type(val) == "string" then
return "[" .. quoteStr(val) .. "]"
else
return "[" .. tostring(val) .. "]"
end
end
wrapVal = function(val, level)
if type(val) == "table" then
return dumpObj(val, level)
elseif type(val) == "number" then
return val
elseif type(val) == "string" then
return quoteStr(val)
else
return tostring(val)
end
end
dumpObj = function(obj, level)
if type(obj) ~= "table" then
return wrapVal(obj)
end
level = level + 1
local tokens = {}
tokens[#tokens + 1] = "{"
for k, v in pairs(obj) do
tokens[#tokens + 1] = getIndent(level) .. wrapKey(k) .. " = " .. wrapVal(v, level) .. ","
end
tokens[#tokens + 1] = getIndent(level - 1) .. "}"
return table.concat(tokens, "
")
end
return dumpObj(obj, 0)
end
local function Write(t, level, name, indent)
if not IS_OPEN[LEVEL[level]] then
return
end
local info = Filter(t, name, indent)
local file = assert(io.open("a.log", "a+"))
file:write(info.."
")
file:close()
end
local function Log(name, level, t)
count = count + 1
local time = os.date("*t", os.time())
local date = string.format("%d:%d:%d", time.hour, time.min, time.sec)
Write(t, level, string.format("[%s %s %s]#", level, date, count))
end
local function CreateLog(name, level)
_G["log" .. name] = function(t)
Log(name, level, t)
end
end
CreateLog("d", "DEBUG")
CreateLog("i", "INFO")
CreateLog("w", "WARN")
CreateLog("e", "ERROR")