logd: Add support for *.logd.filter
- Add device (ro.logd.filter), persistent (persist.logd.filter) properties to control the default filters - Allow logcat -P default to produce expected results - Allow logcat -P disable to produce expected results Change-Id: I651cb705373ec1e88a99e4b9086da4f9668a468a
This commit is contained in:
parent
26352bf1fb
commit
932f7acc81
3 changed files with 52 additions and 10 deletions
|
@ -17,6 +17,7 @@
|
|||
#include <ctype.h>
|
||||
|
||||
#include <base/stringprintf.h>
|
||||
#include <cutils/properties.h>
|
||||
|
||||
#include "LogWhiteBlackList.h"
|
||||
|
||||
|
@ -49,7 +50,8 @@ std::string Prune::format() {
|
|||
return std::string("/");
|
||||
}
|
||||
|
||||
PruneList::PruneList() : mWorstUidEnabled(true) {
|
||||
PruneList::PruneList() {
|
||||
init(NULL);
|
||||
}
|
||||
|
||||
PruneList::~PruneList() {
|
||||
|
@ -72,13 +74,44 @@ int PruneList::init(const char *str) {
|
|||
it = mNaughty.erase(it);
|
||||
}
|
||||
|
||||
if (!str) {
|
||||
return 0;
|
||||
static const char _default[] = "default";
|
||||
// default here means take ro.logd.filter, persist.logd.filter then
|
||||
// internal default in that order.
|
||||
if (str && !strcmp(str, _default)) {
|
||||
str = NULL;
|
||||
}
|
||||
static const char _disable[] = "disable";
|
||||
if (str && !strcmp(str, _disable)) {
|
||||
str = "";
|
||||
}
|
||||
|
||||
std::string filter;
|
||||
|
||||
if (str) {
|
||||
filter = str;
|
||||
} else {
|
||||
char property[PROPERTY_VALUE_MAX];
|
||||
property_get("ro.logd.filter", property, _default);
|
||||
filter = property;
|
||||
property_get("persist.logd.filter", property, filter.c_str());
|
||||
// default here means take ro.logd.filter
|
||||
if (strcmp(property, _default)) {
|
||||
filter = property;
|
||||
}
|
||||
}
|
||||
|
||||
// default here means take internal default.
|
||||
if (filter == _default) {
|
||||
// See README.property for description of filter format
|
||||
filter = "~!";
|
||||
}
|
||||
if (filter == _disable) {
|
||||
filter = "";
|
||||
}
|
||||
|
||||
mWorstUidEnabled = false;
|
||||
|
||||
for(; *str; ++str) {
|
||||
for(str = filter.c_str(); *str; ++str) {
|
||||
if (isspace(*str)) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -12,16 +12,24 @@ ro.build.type string if user, logd.statistics & logd.klogd
|
|||
default false
|
||||
persist.logd.logpersistd string Enable logpersist daemon, "logcatd"
|
||||
turns on logcat -f in logd context
|
||||
persist.logd.size number 256K default size of the buffer for all
|
||||
log ids at initial startup, at runtime
|
||||
use: logcat -b all -G <value>
|
||||
persist.logd.size number 256K Global default size of the buffer for
|
||||
all log ids at initial startup, at
|
||||
runtime use: logcat -b all -G <value>
|
||||
persist.logd.size.main number 256K Size of the buffer for the main log
|
||||
persist.logd.size.system number 256K Size of the buffer for the system log
|
||||
persist.logd.size.radio number 256K Size of the buffer for the radio log
|
||||
persist.logd.size.event number 256K Size of the buffer for the event log
|
||||
persist.logd.size.crash number 256K Size of the buffer for the crash log
|
||||
persist.logd.filter string Pruning filter to optimize content,
|
||||
default is ro.logd.filter or
|
||||
"~!" which means to prune the oldest
|
||||
entries of chattiest UID. At runtime
|
||||
use: logcat -P "<string>"
|
||||
|
||||
NB:
|
||||
- number support multipliers (K or M) for convenience. Range is limited
|
||||
to between 64K and 256M for log buffer sizes. Individual logs override the
|
||||
global default.
|
||||
- Number support multipliers (K or M) for convenience. Range is limited
|
||||
to between 64K and 256M for log buffer sizes. Individual log buffer ids
|
||||
such as main, system, ... override global default.
|
||||
- Pruning filter is of form of a space-separated list of [~][UID][/PID]
|
||||
references, where '~' prefix means to blacklist otherwise whitelist. For
|
||||
blacklisting, UID may be a '!' to instead reference the chattiest client.
|
||||
|
|
|
@ -212,6 +212,7 @@ static void *reinit_thread_start(void * /*obj*/) {
|
|||
// Anything that reads persist.<property>
|
||||
if (logBuf) {
|
||||
logBuf->init();
|
||||
logBuf->initPrune(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue