文章插图
一、背景随着公司应用的逐渐增多,需要集中收集公司部分应用线上运行的一些崩溃数据和日志来进行分析处理,在此实践过程中了解到系统data/system/dropbox目录会生成所有应用的相关日志文件 。
这个目录是由Android系统服务之一DropBoxManagerService来管理,所以由此详细阅读了DropBoxManagerService相关的源码,以下简称DBMS 。
DBMS可能是Android系统服务源码较少的一个,所以阅读起来相对比较简单,阅读之后发现,其实这就是一个简易的日志文件管理服务 。
我们在对应用本地的部分日志文件进行记录和管理的时候,恰巧可以借鉴DBMS源码对于文件管理的设计方案 。
假设不读源码,如果我们自己设计日志文件管理系统,应该需要考虑哪些?
除了最基础的获取各类日志文件的方案,我们针对文件管理可以提出几个需要考虑的点:
- 存取日志采用何种策略
- 设计哪些防呆策略
- 是否需要对外提供接口,提供哪些接口
- 如何保证性能
- 多进程的问题如何解决
- 文件丢失该如何处理
- 文件变化如何通知使用方
二、DropBoxManagerService简介DropBoxManagerService是Android系统的服务之一,采用C/S结构:
- Client端:DropboxManager,用于对应用层提供接口 。
- Server端:DropBoxManagerService,管理系统目录(data/system/dropbox)的系统服务 。
- 系统Setting数据库:负责管理DBMS的一些配置信息 。
文章插图
2.1 DropBox目录简介这个目录的目录结构如下图所示:
文章插图
里面存放的都是系统的一些日志文件,针对不同类型的文件,文件名称和后缀也有所不同 。
2.1.1 文件格式
tag@timeStampMillis.extentions
- tag:代表日志类型,常见的tag:data_App_anr,system_app_crash,data_app_nativecrash,其中data_app表示普通应用,system_app表示系统应用
- timeStampMillis:日志的时间戳,一般情况下等于崩溃的时间,有些情况下系统会做一些调整
- extentions:后缀名,常见的文件后缀名:.txt,.lost,.txt.gz,.tmp,一般的日志文件都是.txt或者.txt.gz,文件被删除后的记录会以.lost命名
2.1.2 常见的文件
- JE文件:
data_app_crash@175423252525.txt.gz - NE文件:
data_app_native_crash@123478923458923.txt.gz - ANR文件:
data_app_anr@175423252525.txt.gz
2.2 提供的接口2.2.1 添加文件
addData/addFile/addEntry
2.2.2 获取文件
getNextEntry,根据tag和时间戳来获取想要的文件 。
2.2.3 dump目录信息
获取DropBox目录的一些信息:文件个数,文件列表,文件详细信息等,可以通过命令行操作(dumpsys dropbox) 。
$ dumpsys dropboxDrop box contents: 131 entriesMax entries: 1000// 以下省略......
2.2.4 其它CMD命令提供其他一些CMD操作的命令,如set-rate-limit,add-low-priority等等 。
2.3 目录管控配置2.3.1 默认基础配置及文件清除策略
这些配置存在系统的setting数据库里面,可以通过settings.global来访问配置 。
文件存储的配置主要包括以下几个维度:
- 文件存活时长(默认3天);
- 最大存储文件数量(默认1000个);
- 低内存情况下最大文件数量(默认300个);
- DropBox目录所能使用的空间(默认10MB);
- DropBox目录最多占可用存储(可用存储=系统可用存储-系统总存储*预留比例)的比例(10%);
推荐阅读
- Go、Spring Boot、 Elixir 以及Helidon 微服务框架性能测试对比
- 招聘|学历成孔乙己的“长衫”?酒店到某211高校招服务员,破大防了
- 求职|湖北广播电视台后勤服务中心招聘7人
- 沈志莉|教育系统是清水衙门?这位落马女校长,一次美容就花69万
- 苏果供应商b2b服务系统_什么是B2B数字化供应链平台?
- 结构化布线网络系统及其基本组成部分
- 结构化布线系统的十大优势
- 永远不要在你的 Linux 系统上运行这些命令
- 人工智能热潮导致算力紧张,微软推新服务器租赁计划
- 选择美国服务器为什么推荐CN2线路?