通過屬性控制log輸出

2021-09-23 10:27:18 字數 2349 閱讀 5678

涉及**目錄

android\system\core\include\log

android\system\core\liblog

重點檔案

android\system\core\include\log\log.h

android\system\core\liblog\log_is_loggable.c

log輸出等級判斷

log是否輸出,在底層log輸出模組**實現中通過level判斷

static int __write_to_log_daemon(log_id_t log_id, struct iovec *vec, size_t nr)

{ ......

if (!__android_log_is_loggable(prio, tag, android_log_verbose))

......

log等級定義如下

/*

* android log priority values, in ascending priority order.

*/typedef enum android_logpriority android_logpriority;

判斷是否輸出log的邏輯

判斷乙個tag對應的log是否輸出邏輯

liblog_abi_public int __android_log_is_loggable(int prio, const char *tag,

int default_prio)

獲取對應tag log輸出優先順序,預設優先順序是android_log_verbose

static int __android_log_level(const char *tag, int default_prio)

}for (i = 0; i < (sizeof(global_cache) / sizeof(global_cache[0])); ++i)

}current_global_serial = __system_property_area_serial();

if (current_global_serial != global_serial)

}if (taglen)

last_tag[0] = '\0';

local_change_detected = 1;

}if (!last_tag[0])

}strcpy(key + sizeof(log_namespace) - 1, tag);

kp = key;

for (i = 0; i < (sizeof(tag_cache) / sizeof(tag_cache[0])); ++i)

if (local_change_detected)

if (cache->c)

kp = key + base_offset;}}

switch (toupper(c))

cache = &temp_cache;

}if (global_change_detected)

if (cache->c)

kp = key + base_offset;

}break;

}if (!not_locked)

switch (toupper(c))

return default_prio;

}

從**看,原始碼沒有實現單個tag的輸出控制,這部分可以根據需求自行實現。原始碼中實現了對log的全域性控制,可以通過設定系統屬性

log.tag

persist.log.tag

屬性控制log輸出

設定的值為以下不同level的首字母,如android_log_debug,設定為d

android_log_verbose,

android_log_debug,

android_log_info,

android_log_warn,

android_log_error,

android_log_fatal,

android_log_silent

例如:

// 輸出大於等於android_log_debug等級的log

setprop persist.log.tag d

python控制台log輸出儲存

日誌輸出與儲存 import logging import time from logging import handlers class logger object level relations 日誌級別關係對映 def init self,level info when d backcount...

通過格式輸出控制使輸出的結果對齊

一般輸出情況 include includeusing namespace std int main for int i 1 i 100 i cout 輸出結果 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ...

如何靈活控制log4j日誌輸出級別

我們知道 log4j.logger.xx cover log4j.rootlogger 也就是說rootlogger首先決定所有log的輸出級別,而log4j.logger.xx是對xx路徑下的jar包的輸出級別的修改,直接覆蓋rootlogger 但是對於不同的輸出口,他們的接收級別是不同的。舉例...