Merge "logcatd: trampoline persist.logd.logpersistd to logd.logpersistd"

This commit is contained in:
Treehugger Robot 2016-07-13 17:45:44 +00:00 committed by Gerrit Code Review
commit 3ba829c75c
3 changed files with 90 additions and 20 deletions

View file

@ -1,21 +1,62 @@
#
# init scriptures for logcatd persistent logging.
#
# Make sure any property changes are only performed with /data mounted, after
# post-fs-data state because otherwise behavior is undefined. The exceptions
# are device adjustments for logcatd service properties (persist.* overrides
# notwithstanding) for logd.logpersistd.size and logd.logpersistd.buffer.
# persist to non-persistent trampolines to permit device properties can be
# overridden when /data mounts, or during runtime.
on property:persist.logd.logpersistd.size=256
setprop persist.logd.logpersistd.size ""
setprop logd.logpersistd.size ""
on property:persist.logd.logpersistd.size=*
# expect /init to report failure if property empty (default)
setprop logd.logpersistd.size ${persist.logd.logpersistd.size}
on property:persist.logd.logpersistd.buffer=all
setprop persist.logd.logpersistd.buffer ""
setprop logd.logpersistd.buffer ""
on property:persist.logd.logpersistd.buffer=*
# expect /init to report failure if property empty (default)
setprop logd.logpersistd.buffer ${persist.logd.logpersistd.buffer}
on property:persist.logd.logpersistd=logcatd on property:persist.logd.logpersistd=logcatd
setprop logd.logpersistd logcatd
# enable, prep and start logcatd service
on load_persist_props_action
setprop logd.logpersistd.enable true
on property:logd.logpersistd.enable=true && property:logd.logpersistd=logcatd
# all exec/services are called with umask(077), so no gain beyond 0700 # all exec/services are called with umask(077), so no gain beyond 0700
mkdir /data/misc/logd 0700 logd log mkdir /data/misc/logd 0700 logd log
# logd for write to /data/misc/logd, log group for read from pstore (-L) # logd for write to /data/misc/logd, log group for read from pstore (-L)
exec - logd log -- /system/bin/logcat -L -b ${persist.logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${persist.logd.logpersistd.size:-256} exec - logd log -- /system/bin/logcat -L -b ${logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${logd.logpersistd.size:-256}
start logcatd start logcatd
on property:persist.logd.logpersistd=clear # stop logcatd service and clear data
on property:logd.logpersistd.enable=true && property:logd.logpersistd=clear
setprop persist.logd.logpersistd ""
stop logcatd stop logcatd
# logd for clear of only our files in /data/misc/logd # logd for clear of only our files in /data/misc/logd
exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${persist.logd.logpersistd.size:-256} exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${logd.logpersistd.size:-256}
setprop persist.logd.logpersistd "" setprop logd.logpersistd ""
on property:persist.logd.logpersistd=stop # stop logcatd service
on property:logd.logpersistd=stop
setprop persist.logd.logpersistd ""
stop logcatd stop logcatd
setprop persist.logd.logpersistd "" setprop logd.logpersistd ""
service logcatd /system/bin/logcat -b ${persist.logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${persist.logd.logpersistd.size:-256} on property:logd.logpersistd.enable=false
stop logcatd
# logcatd service
service logcatd /system/bin/logcat -b ${logd.logpersistd.buffer:-all} -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 1024 -n ${logd.logpersistd.size:-256}
class late_start class late_start
disabled disabled
# logd for write to /data/misc/logd, log group for read from log daemon # logd for write to /data/misc/logd, log group for read from log daemon

View file

@ -8,8 +8,16 @@ case `getprop ro.debuggable` in
;; ;;
esac esac
data=/data/misc/logd
property=persist.logd.logpersistd property=persist.logd.logpersistd
case `getprop ${property#persist.}.enable` in
true) ;;
*) echo "${progname} - Disabled"
exit 1
;;
esac
data=/data/misc/logd
service=logcatd service=logcatd
size_default=256 size_default=256
buffer_default=all buffer_default=all
@ -69,11 +77,11 @@ case ${progname} in
su logd xargs cat su logd xargs cat
;; ;;
*.start) *.start)
current_buffer="`getprop ${property}.buffer`" current_buffer="`getprop ${property#persist.}.buffer`"
current_size="`getprop ${property}.size`" current_size="`getprop ${property#persist.}.size`"
if [ "${service}" = "`getprop ${property}`" ]; then if [ "${service}" = "`getprop ${property#persist.}`" ]; then
if [ "true" = "${clear}" ]; then if [ "true" = "${clear}" ]; then
setprop ${property} "clear" setprop ${property#persist.} "clear"
elif [ "${buffer}|${size}" != "${current_buffer}|${current_size}" ]; then elif [ "${buffer}|${size}" != "${current_buffer}|${current_size}" ]; then
echo "ERROR: Changing existing collection parameters from" >&2 echo "ERROR: Changing existing collection parameters from" >&2
if [ "${buffer}" != "${current_buffer}" ]; then if [ "${buffer}" != "${current_buffer}" ]; then
@ -96,22 +104,30 @@ case ${progname} in
exit 1 exit 1
fi fi
elif [ "true" = "${clear}" ]; then elif [ "true" = "${clear}" ]; then
setprop ${property} "clear" setprop ${property#persist.} "clear"
fi fi
if [ -n "${buffer}${current_buffer}" ]; then if [ -n "${buffer}${current_buffer}" ]; then
setprop ${property}.buffer "${buffer}" setprop ${property}.buffer "${buffer}"
if [ -z "${buffer}" ]; then
# deal with trampoline for empty properties
setprop ${property#persist.}.buffer ""
fi
fi fi
if [ -n "${size}${current_size}" ]; then if [ -n "${size}${current_size}" ]; then
setprop ${property}.size "${size}" setprop ${property}.size "${size}"
if [ -z "${size}" ]; then
# deal with trampoline for empty properties
setprop ${property#persist.}.size ""
fi
fi fi
while [ "clear" = "`getprop ${property}`" ]; do while [ "clear" = "`getprop ${property#persist.}`" ]; do
continue continue
done done
# ${service}.rc does the heavy lifting with the following trigger # ${service}.rc does the heavy lifting with the following trigger
setprop ${property} ${service} setprop ${property} ${service}
getprop ${property}
# 20ms done, to permit process feedback check # 20ms done, to permit process feedback check
sleep 1 sleep 1
getprop ${property#persist.}
# also generate an error return code if not found running # also generate an error return code if not found running
pgrep -u ${data##*/} ${service%d} pgrep -u ${data##*/} ${service%d}
;; ;;
@ -124,13 +140,17 @@ case ${progname} in
else else
setprop ${property} "stop" setprop ${property} "stop"
fi fi
if [ -n "`getprop ${property}.buffer`" ]; then if [ -n "`getprop ${property#persist.}.buffer`" ]; then
setprop ${property}.buffer "" setprop ${property}.buffer ""
# deal with trampoline for empty properties
setprop ${property#persist.}.buffer ""
fi fi
if [ -n "`getprop ${property}.size`" ]; then if [ -n "`getprop ${property#persist.}.size`" ]; then
setprop ${property}.size "" setprop ${property}.size ""
# deal with trampoline for empty properties
setprop ${property#persist.}.size ""
fi fi
while [ "clear" = "`getprop ${property}`" ]; do while [ "clear" = "`getprop ${property#persist.}`" ]; do
continue continue
done done
;; ;;

View file

@ -1,4 +1,4 @@
The properties that logd responds to are: The properties that logd and friends react to are:
name type default description name type default description
ro.logd.auditd.dmesg bool true selinux audit messages duplicated and ro.logd.auditd.dmesg bool true selinux audit messages duplicated and
@ -9,8 +9,16 @@ ro.logd.kernel bool+ svelte+ Enable klogd daemon
ro.logd.statistics bool+ svelte+ Enable logcat -S statistics. ro.logd.statistics bool+ svelte+ Enable logcat -S statistics.
ro.debuggable number if not "1", logd.statistics & ro.debuggable number if not "1", logd.statistics &
ro.logd.kernel default false. ro.logd.kernel default false.
logd.logpersistd.enable bool auto Safe to start logpersist daemon service
logd.logpersistd string persist Enable logpersist daemon, "logcatd"
turns on logcat -f in logd context.
Responds to logcatd, clear and stop.
logd.logpersistd.buffer persist logpersistd buffers to collect
logd.logpersistd.size persist logpersistd size in MB
persist.logd.logpersistd string Enable logpersist daemon, "logcatd" persist.logd.logpersistd string Enable logpersist daemon, "logcatd"
turns on logcat -f in logd context turns on logcat -f in logd context.
persist.logd.logpersistd.buffer all logpersistd buffers to collect
persist.logd.logpersistd.size 256 logpersistd size in MB
persist.logd.size number ro Global default size of the buffer for persist.logd.size number ro Global default size of the buffer for
all log ids at initial startup, at all log ids at initial startup, at
runtime use: logcat -b all -G <value> runtime use: logcat -b all -G <value>
@ -44,6 +52,7 @@ log.tag.<tag> string persist The <tag> specific logging level.
persist.log.tag.<tag> string build default for log.tag.<tag> persist.log.tag.<tag> string build default for log.tag.<tag>
NB: NB:
- auto - managed by /init
- bool+ - "true", "false" and comma separated list of "eng" (forced false if - bool+ - "true", "false" and comma separated list of "eng" (forced false if
ro.debuggable is not "1") or "svelte" (forced false if ro.config.low_ram is ro.debuggable is not "1") or "svelte" (forced false if ro.config.low_ram is
true). true).