tommwq / AppLogManagement

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

试验客户端本地日志上报。

场景1。用户持续在线。
场景2。用户掉线。
场景3。节点崩溃。


0.01 版本。完成。
后台服务提供一个Web页面,显示哪些设备在线,并允许用户查看在线设备的日志。

0.02a 版本。完成。
Android程序和一个后台服务。启动Android程序后,Android程序生成一条日志。用户输入后台服务地址,让Android程序连接服务器。后台服务要求Android上传日志,Android上传日志后,后台服务显示这条日志。

0.02b 版本。
支持iOS。

0.03 版本。
后台服务支持多节点,可以相互查询。

0.04 版本。
支持离线重连时上传日志。


设计方案。

日志文件。日志文件大小固定,按blocksize分为N个块,编号为0到N-1。0、1两个块用来记录锚点,其他块记录日志。日志分为长度和内容两部分。日志长度是一个32位整数,日志内容是一个字节数组,记录了一个Log消息。每个块的首32字节和尾32字节是校验码,其他字节记录数据。锚点也有校验码,同时还记录了时间戳、第一个和最后一个有效块编号。

日志模型。日志是对特定时刻下系统中部分状态信息的记录。根据记录信息的不同,日志分为设备和程序信息日志、函数和对象日志、异常日志、自定义日志等。设备和程序信息日志记录设备和程序的信息,包括设备号、设备版本、操作系统名称、操作系统版本、程序版本、模块名和模块版本等。这些信息有助于判断问题是否和某个特定的硬件或软件版本有关。函数和对象状态日志记录源代码文件名、行号、类名、方法名、以及部分对象的值,有助于开发者了解函数内部状态。异常日志记录了源代码文件名、行号、类名、方法名、异常原因,异常堆栈等信息,便于排查异常情况。自定义日志是开发者编写的字符串。为了方便查询和管理,所有日志都记录了日志序号和设备本地时间。

日志上报。开发这预料到的异常情况,在开发过程中都已经进行了处理。软件发生错误,往往是开发者意料之外的地方出了问题。由于不知道是哪里出了问题,需要将尽量详细记录日志,以便快速定位和排查。移动应用部署在用户的手机上。往往很难获取用户手机上的日志文件。同时,考虑到移动网络流量资费的问题,将全部日志上传到服务器也是不合适的。因此日志上报采用按需上报的原则。开发者指定要查询的模块、日志序号和日志数量,应用将这部分日志上报给服务器。同时为了避免重复上报,服务器会缓存客户端上报的日志。

日志上报触发事件。日志上报触发事件有2个,分别是程序启动事件、管理平台命令事件、和程序异常退出事件。当程序启动后,日志代理连接管理平台,上报设备和程序信息日志,以便管理平台建立手机号和设备的对应关系。同时,日志模块扫描上次启动以来的日志,如果发现最近一次程序退出的原因是未捕获异常,将对应的异常日志上报给服务器。当收到管理平台的日志上报命令后,日志代理查询相关日志并进行上报。

配合logcat使用。Android使用的sdk在记录日志时,同时将日志输出到logcat,便于开发者调试。

日志服务器。日志服务器负责管理设备在线状态,下发日志查询命令,收集和缓存客户端上报日志,转发客户端上报日志等。

日志服务器多节点部署。为了提高日志服务器的可用性,日志服务器采用多节点方式部署。各节点的地位是对等的。每个节点复制管理一组客户端的日志。节点之间可以相互查询客户端信息和转发客户端日志。

管理服务器。管理服务器是提供给开发者的管理平台。开发者在通过管理服务器向日志服务器下发指令,查询客户端日志。

About


Languages

Language:Java 96.8%Language:HTML 1.5%Language:JavaScript 1.1%Language:FreeMarker 0.6%