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:
Mark Salyzyn 2015-08-28 08:02:59 -07:00
parent 26352bf1fb
commit 932f7acc81
3 changed files with 52 additions and 10 deletions

View file

@ -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;
}

View file

@ -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.

View file

@ -212,6 +212,7 @@ static void *reinit_thread_start(void * /*obj*/) {
// Anything that reads persist.<property>
if (logBuf) {
logBuf->init();
logBuf->initPrune(NULL);
}
}