ULog远程日志——让Android调试更加方便直观

在发布U8SDK之后,使用U8SDK做SDK接入的同学,反馈比较多的一个问题就是调试困难。这其实不是U8SDK的毛病,而是Android开发的通病。做Android开发,我们通常都是结合logcat来调试,如果是原生的应用,有时我们还可以直接通过Debug断点来调试,但是,做游戏开发,我们一般采用U3D,Cocos2dx游戏引擎开发之后,发布到对应的移动平台。所以,断点调试就不太好实现了。很多时候,我们都是打印一些日志,然后在logcat中定位对应的日志,来查找错误信息。

之前也一直是使用logcat,但是logcat中日志太多,过滤功能虽然有,但是有时候,有些机型,打印的日志太多,你还没有看清楚,日志就被各种系统日志给顶掉了。

而且,很多做游戏开发的同学,可能也是游戏快要做好了,要接各个平台的渠道SDK的时候,才开始接触Android开发。导致对logcat如何正确使用,就更找不到门路。

所以,我想干脆在原有日志的基础上,再加一个远程日志打印,再接将日志输出到网页上,这样日志方便搜索,也不用理会各种乱七八糟的系统日志。

然后,我们在U8SDK中将原有日志简单封装了下,让日志打印可以支持远程打印。远程打印,顾名思义,我们需要一个服务器端,来接收这些日志,并输出到网页上。

首先想到的是,用java写,部署到tomcat,但是想想,如此简单的一个逻辑,用java真是有点浪费不说,还有点臃肿。最后,因为U8SDK打包工具用python写的,那么想就用python搭建一个吧,了解了下python中搭建一个web服务器端,有几种框架可以使用,最终选择了一个最最简单的web.py框架,这个框架要实现我们这个功能,真是再合适不过了,轻量的不能再轻量了。

我们只需要实现两个功能接口, 一个是上报日志的接口,一个是显示日志的接口。上报日志,我们采用Http Post方式, 显示日志,采用Http Get浏览器中直接访问。

为了让不同级别的日志显示区别开来,我们给不同级别的日志,配上不同的颜色。

客户端上报的日志,先在内存中放着,网页上我们启动一段js代码,每隔1秒钟自动刷新一次,并将滚动位置,始终保持在最后。这样,我们的一个简单的日志收集和展示的web 服务器就好了,代码片段:

import json
import web

web.config.debug = False

urls = (
        '/','index'
    )

localLogs = ""


class index:

    def GET(self):

        htmlFormat = "<html><head><title></title></head><body>%s   <script type=\"text/javascript\">function myrefresh(){window.location.reload();window.scrollTo(0,document.body.scrollHeight);}setTimeout('myrefresh()',1000); </script></body></html>"   
        global localLogs
        localLogs = localLogs.encode('gbk')
        return htmlFormat % localLogs


    def POST(self):

        inputs=web.input()
        content = inputs.get('log')

        if content.startswith('{') and content.endswith('}'):
            content = '[' + content + ']'

        logs = json.loads(content)

        for log in logs:

            if 'stack' not in log:
                log['stack'] = " "

            color = '#808080'
            if log['level'] == 'INFO':
                color = '#008000'
            elif log['level'] == 'WARNING':
                color = '#FFA500'
            elif log['level'] == 'ERROR':
                color = '#FF0000'

            strLog = '<div style="color:%s">%s  %s: [%s] %s </div>' % (color, log['time'],log['level'], log['tag'], log['msg'])

            stacks = log['stack'].split('\n')
            strLog = strLog + ('<div color="%s">' % color)
            for s in stacks:
                strLog = strLog + ('<div>%s</div>' % (s.strip()))

            strLog = strLog + '</div>'

            global localLogs
            localLogs = localLogs + strLog

        return ""


if __name__ == '__main__':

    app = web.application(urls, globals())
    app.run()

上面这段代码,就是我们这个日志服务器的全部代码了,我们将这个文件保存为uconsole.py,然后,打开命令终端,运行:

python uconsole.py

这样,就可以启动该服务器了,默认监听的端口是8080。如果该端口被占用了,会启动失败,那么我们可以换一个端口

python uconsole.py 8082

这样,我们就变成监听8082这个端口了。你可以打开http:localhost:8082/

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值