涉及**目錄
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 但是對於不同的輸出口,他們的接收級別是不同的。舉例...