init.lua 2.95 KB
--[[
@Author  : Mr.wang
@Date    : 2016-04-22 10:00:30
@Content : 
根据"DEBUG"的值控制日志等级
    0:NONE
    1:INFO
    2:DEBUG
外部接口:
    logD/logI/logW/logE
    print = logI
--]]
if not socket then
    require("socket")
end

local log = import(".log")
local helper = import(".helper")

local logout
local level
local print_ = print

-- 输出控制(等级、格式)
if 0 == DEBUG then
    -- 不输出任何信息
    print("不输出任何信息")
    logout = function() end
    level = log.NONE
else
    if 1 == DEBUG then
        level = log.INFO
    else
        level = log.DEBUG
    end
    --[[
    输出格式:
    [14:00:02] warn
    [14:00:02] error
    --]]
    logout = function(self, lv, ...)
        local s, ms = unpack(string.split(tostring(socket.gettime()), "."))
        local time = os.date("%X", tonumber(s))
--        local tag = string.format("[%s.%04d %5s] ", time, tonumber(ms or 0), lv)
        local tag = string.format("[%s] ", time)
        -- 输出信息处理
        local params = {...}
        table.map(params, helper.format)
        -- release版本的引擎也能写出来日志
        print_(tag.." "..table.concat(params, "\t"))
    end
end


local logger = log.new(logout)

-- 导出方法

if not helper.isWindows() then
    _G.logD = handler(logger, logger.debug)
    _G.logW = handler(logger, logger.warn)
    _G.logE = handler(logger, logger.error)
else
    --windows下设置控制台颜色
    local color = import(".color")
    local setColor = color.setColor
    local resetColor = function() setColor(color.DEFAULT_COLOR) end
    -- debug:绿色
    _G.logD = function(...)
        setColor(color.GREEN)
        logger:debug(...)
        resetColor()
    end
    -- warn:紫色
    _G.logW = function(...)
        setColor(color.PURPLE)
        logger:warn(...)
        resetColor()
    end
    -- error:红色
    _G.logE = function(...)
        setColor(color.RED)
        logger:error(...)
        resetColor()
    end
end

_G.logI = handler(logger, logger.info)
--_G.print = logI

logD("debug")
logI("info")
logW("socket")
logE("error")

local label = cc.Label:create();
--label:setFontSize(14);
label:setName("logUILable");
label:retain();
label:setColor(cc.c3b(255,0,0));
label:setAnchorPoint(cc.p(0,1));
label:setPosition(cc.p(5,display.height-25));
local function checkLogUI()
    if DEBUG == 0 then
        return;
    end
    local runningScene = cc.Director:getInstance():getRunningScene();
    if runningScene and not runningScene:getChildByName("logUILable") then
        runningScene:addChild(label,2000);
    end
end;
cc.Director:getInstance():getScheduler():scheduleScriptFunc(checkLogUI, 1, false);
_G.logUI = function(str)
    if DEBUG == 0 then
        return;
    end
    label:setString(label:getString()..str.."\n");
    local runningScene = cc.Director:getInstance():getRunningScene();
    if runningScene and not runningScene:getChildByName("logUILable") then
        runningScene:addChild(label,2000);
    end
end