1df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn#
2df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# init scriptures for logcatd persistent logging.
3df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn#
4df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# Make sure any property changes are only performed with /data mounted, after
5df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# post-fs-data state because otherwise behavior is undefined. The exceptions
6df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# are device adjustments for logcatd service properties (persist.* overrides
7df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# notwithstanding) for logd.logpersistd.size and logd.logpersistd.buffer.
8df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
9df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# persist to non-persistent trampolines to permit device properties can be
10df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# overridden when /data mounts, or during runtime.
11df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:persist.logd.logpersistd.size=256
12df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop persist.logd.logpersistd.size ""
13df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd.size ""
14df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
15df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:persist.logd.logpersistd.size=*
16df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    # expect /init to report failure if property empty (default)
17df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd.size ${persist.logd.logpersistd.size}
18df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
19df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:persist.logd.logpersistd.buffer=all
20df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop persist.logd.logpersistd.buffer ""
21df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd.buffer ""
22df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
23df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:persist.logd.logpersistd.buffer=*
24df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    # expect /init to report failure if property empty (default)
25df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd.buffer ${persist.logd.logpersistd.buffer}
26df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
2720391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherryon property:persist.logd.logpersistd=logcatd
28df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd logcatd
29df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
30df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# enable, prep and start logcatd service
31df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon load_persist_props_action
32df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd.enable true
33df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
34df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:logd.logpersistd.enable=true && property:logd.logpersistd=logcatd
3520391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    # all exec/services are called with umask(077), so no gain beyond 0700
3620391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    mkdir /data/misc/logd 0700 logd log
3720391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    start logcatd
3820391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry
39df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# stop logcatd service and clear data
40df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:logd.logpersistd.enable=true && property:logd.logpersistd=clear
41df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop persist.logd.logpersistd ""
422d737011d6ba4389b15c7ac62b8964208391b884Mark Salyzyn    stop logcatd
432d737011d6ba4389b15c7ac62b8964208391b884Mark Salyzyn    # logd for clear of only our files in /data/misc/logd
44df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    exec - logd log -- /system/bin/logcat -c -f /data/misc/logd/logcat -n ${logd.logpersistd.size:-256}
45df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd ""
46df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn
47df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# stop logcatd service
48df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:logd.logpersistd=stop
492d737011d6ba4389b15c7ac62b8964208391b884Mark Salyzyn    setprop persist.logd.logpersistd ""
50df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    stop logcatd
51df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn    setprop logd.logpersistd ""
522d737011d6ba4389b15c7ac62b8964208391b884Mark Salyzyn
53df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzynon property:logd.logpersistd.enable=false
542d737011d6ba4389b15c7ac62b8964208391b884Mark Salyzyn    stop logcatd
552d737011d6ba4389b15c7ac62b8964208391b884Mark Salyzyn
56df5d12850aa114c3cd5b2913762524c55d8d2b37Mark Salyzyn# logcatd service
57558282bfe4650f7b249f5ba0a24d3a400d67b78bMark Salyzynservice logcatd /system/bin/logcatd -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} --id=${ro.build.id}
5820391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    class late_start
5920391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    disabled
6020391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    # logd for write to /data/misc/logd, log group for read from log daemon
6120391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    user logd
6220391b1de5aaa49657d625fe18a36d4484c6ac31Tom Cherry    group log
63984bd8323dcb5e494a04b2058ab7de40bf347ee5Tom Cherry    writepid /dev/cpuset/system-background/tasks
64