1. 程式人生 > >MTK平臺修改log的日誌級別

MTK平臺修改log的日誌級別

軟體平臺: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手動操作。

 

鳴金收兵!!!完工大吉!!!