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

Commit 100658c3 authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

init.rc: logd: Add logpersistd (nee logcatd)

- logpersistd is defined as a thread or process in the context of the
  logd domain. Here we define logpersistd as logcat -f in logd domain
  and call it logcatd to represent its service mechanics.
- Use logcatd to manage content in /data/misc/logd/ directory.
- Only turn on for persist.logd.logpersistd = logcatd.
- Add logpersist.start, logpersist.stop and logpersist.cat debug
  class executables, thus only in the eng and userdebug builds.

ToDo: Wish to add Developer Options menu to turn this feature on or
off, complicated by the fact that user builds have no tools with
access rights to /data/misc/logd.

Bug: 19608716
Change-Id: I57ad757f121c473d04f9fabe9d4820a0eca06f31
parent 17fff893
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -41,4 +41,15 @@ LOCAL_CFLAGS := -Werror $(event_flag)

include $(BUILD_EXECUTABLE)

include $(CLEAR_VARS)

LOCAL_MODULE := logpersist.start
LOCAL_MODULE_TAGS := debug
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_MODULE_PATH := $(bin_dir)
LOCAL_SRC_FILES := logpersist
ALL_TOOLS := logpersist.start logpersist.stop logpersist.cat
LOCAL_POST_INSTALL_CMD := $(hide) $(foreach t,$(filter-out $(LOCAL_MODULE),$(ALL_TOOLS)),ln -sf $(LOCAL_MODULE) $(TARGET_OUT)/bin/$(t);)
include $(BUILD_PREBUILT)

include $(call first-makefiles-under,$(LOCAL_PATH))
+2 −0
Original line number Diff line number Diff line
@@ -10,6 +10,8 @@ ro.config.low_ram bool false if true, logd.statistics & logd.klogd
                                         default false
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>

logd/logpersist

0 → 100755
+36 −0
Original line number Diff line number Diff line
#! /system/bin/sh
# logpersist cat start and stop handlers
data=/data/misc/logd
property=persist.logd.logpersistd
service=logcatd
progname="${0##*/}"
if [ X"${1}" = "-h" -o X"${1}" = X"--help" ]; then
  echo "${progname%.*}.cat            - dump current ${service%d} logs"
  echo "${progname%.*}.start          - start ${service} service"
  echo "${progname%.*}.stop [--clear] - stop ${service} service"
  exit 0
fi
case ${progname} in
*.cat)
  su 1036 ls "${data}" |
  tr -d '\r' |
  sort -ru |
  sed "s#^#${data}/#" |
  su 1036 xargs cat
  ;;
*.start)
  su 0 setprop ${property} ${service}
  getprop ${property}
  sleep 1
  ps -t | grep "${data##*/}.*${service%d}"
  ;;
*.stop)
  su 0 stop ${service}
  su 0 setprop ${property} ""
  [ X"${1}" != X"-c" -a X"${1}" != X"--clear" ] ||
  ( sleep 1 ; su 1036,9998 rm -rf "${data}" )
  ;;
*)
  echo "Unexpected command ${0##*/} ${@}" >&2
  exit 1
esac
+14 −0
Original line number Diff line number Diff line
@@ -649,3 +649,17 @@ service perfprofd /system/xbin/perfprofd
    class late_start
    user root
    oneshot

on property:persist.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 all -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 64 -n 256
    start logcatd

service logcatd /system/bin/logcat -b all -v threadtime -v usec -v printable -D -f /data/misc/logd/logcat -r 64 -n 256
    class late_start
    disabled
    # logd for write to /data/misc/logd, log group for read from log daemon
    user logd
    group log