Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ba829c7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

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

parents fc36f6fa 2591d483
Loading
Loading
Loading
Loading
+47 −6
Original line number Diff line number Diff line
#
# 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
    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
    mkdir /data/misc/logd 0700 logd log
    # 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

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
    # 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 logd.logpersistd ""

# stop logcatd service
on property:logd.logpersistd=stop
    setprop persist.logd.logpersistd ""
    stop logcatd
    setprop logd.logpersistd ""

on property:persist.logd.logpersistd=stop
on property:logd.logpersistd.enable=false
    stop logcatd
    setprop persist.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}
# 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
    disabled
    # logd for write to /data/misc/logd, log group for read from log daemon
+31 −11
Original line number Diff line number Diff line
@@ -8,8 +8,16 @@ case `getprop ro.debuggable` in
   ;;
esac

data=/data/misc/logd
property=persist.logd.logpersistd

case `getprop ${property#persist.}.enable` in
true) ;;
*) echo "${progname} - Disabled"
   exit 1
   ;;
esac

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

name                       type default  description
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.debuggable              number        if not "1", logd.statistics &
                                         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"
                                         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
                                         all log ids at initial startup, at
                                         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>

NB:
- auto - managed by /init
- 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
  true).