软件平台:Android6.0
硬件平台:MTK6797
mtk平台的日志级别可以从一条系统属性查看:persist.log.tag,此条属性默认为V级别,然后系统的日志疯狂的输出,单单从操作层面看的话,可以setprop这个属性的值来提升系统的日志输出级别。比如,想把级别提升到error级别,则只需要执行如下操作:
setprop persist.log.tag E 即可。
问题是,我们如何修改系统默认的日志级别,比如设备第一次启动,日志级别就是E或者其他。
我跟了一下日志设置服务相关的代码,vendor/mediatek/proprietary/external/libxlog/xlogcmd/xlog.c文件有对log服务的相关参数初始化,系统启动时,xlog作为一个service启动,是在device/mediatek/mt6797/init.xlog.rc中定义启动,内容如下:
service xlogboot /system/bin/xlog boot
user root
oneshot
disabled
向可执行文件xlog传入参数boot,从xlog的main方法看:
int main(int argc, char *argv[])
{
if (argc < 2) {
usage(argv[0]);
return 1;
}
const char *name = argv[1];
if (!strcmp(name, "boot")) {
filter_boot();
}
.....
会走filter_boot,这个方法会去解析一个系统默认的log配置文件:
#define XLOG_DEFAULT_FILTER_PATH "/system/etc/xlog-filter-default"
这是配置文件的路径定义,下边我们看这个文件的生成方式。
merge-xlog-filter-tags.py 这个python脚本生成了这个文件,从脚本中看,将V设置为初始化的级别,将V改为E即可。
# change xlog default print level 'E'
olevel = "error/debug+error/error"
if default_level != None:
olevel = default_level
default_filter_buffer.write("XLOG-FILTER-V2\nALL\t%s\n" % (olevel))
这样的话,生成的xlog-filter-default的内容如下:
XLOG-FILTER-V2
ALL error/debug+error/error
TAG AppLaunch off
如此,结果就妙了,会将persist.log.tag值默认设置为E,而不需要文章开始的setprop手动操作。