ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
前面提到,Logger日志一共划分为main、system、radio和events四种类型,其中,前面三种类型的日志格式是相同的,而第四种类型的日志格式稍有区别。下面我们就分别介绍它们的格式。 类型为main、system和radio的日志格式如图4-2所示。 ![类型为main、system和radio的日志格式](https://box.kancloud.cn/9eda68ca5f88aadff6f61d5a02cd47f2_767x37.jpg =767x37) 其中,priority表示日志优先级,它是一个整数;tag表示日志标签,它是一个字符串;msg表示日志内容,它也是一个字符串。日志优先级和日志标签可以在显示日志时作过滤字段使用。日志优先级按照重要程度一般划分为VERBOSE、DEBUG、INFO、WARN、ERROR和FATAL六种。 类型为events的日志格式如图4-3所示。 ![类型为events的日志格式](https://box.kancloud.cn/795dfca320b8eac9d25b954dacb5eb4e_781x39.jpg =781x39) 其中,tag表示日志标签,它是一个整数;msg表示日志内容,它是一块二进制数据,它的内容格式是由日志写入者来决定的。一般来说,这些日志内容是由一个或者多个值组成的,每个值的前面都有一个字段来描述它的类型,如图4-4所示。 ![类型为events的日志内容的格式](https://box.kancloud.cn/d638364bfab424519ce6722f577150f4_782x43.jpg =782x43) 其中,值的类型为整数(int)、长整数(long)、字符串(string)或者列表(list),它们分别使用数字1、2、3和4来描述。 由于events类型的日志标签是一个整数值,在显示时不具有可读性,因此,Android系统使用设备上的日志标签文件/system/etc/event-log-tags来描述这些标签值的含义。这样,Logcat工具在显示events类型的日志时,就可以把日志中的标签值转换为字符串。此外,该日志标签文件还用来描述events类型的日志内容的格式,它的格式如图4-5所示。 ![日志标签文件格式](https://box.kancloud.cn/1e78444c6059504dd595d0d1a0d8e69b_824x39.jpg =824x39) 其中,第一个字段tag number表示日志标签值,它的取值范围为0~2147483648;第二个字段tag name是日志标签值对应的字符串描述,它是由字母[A-Z][a-z]、数字[0-9]或者下画线“_”组成的;第三个字段用来描述组成日志内容的值格式,如图4-6所示。 ![类型为events的日志内容的值格式](https://box.kancloud.cn/240b83bea923713f24ad89e9967c0215_810x35.jpg =810x35) 其中,name表示日志内容值的名称;data type表示日志内容值的数据类型,它的取值范围为1~4,分别表示整数(int)、长整数(long)、字符串(string)和列表(list);data unit表示日志内容值的数据单位,它的取值范围是1~6,分别表示对象数量(number of objects)、字节数(Number of bytes)、毫秒数(Number of milliseconds)、分配额(Number of allocations)、标志(ID)和百分比(Percent)。 最后,我们从Android模拟器上的日志标签文件/system/etc/event-log-tags中取出一行内容来说明类型为events的日志格式,如下所示。 ~~~ 2722 battery_level (level|1|6),(voltage|1|1),(temperature|1|1) ~~~ 其中,2722表示日志标签值,而battery_level用来描述日志标签值2722的含义。此外,从battery_level后面的内容可以看出,日志标签值等于2722的日志内容由三个值组成,它们分别是level、voltage和temperature,对应的数据类型都是整数(int),但是level的单位是百分比(6),voltage和temperature的单位均为对象数量(1)。