android_system_core/logd
Mark Salyzyn c48d249c37 liblog: logd: support logd.timestamp = monotonic
(cherry pick from commit b6bee33182)

if ro.logd.timestamp or persist.logd.timestamp are set to the value
monotonic then liblog writer, liblog printing and logd all switch to
recording/printing monotonic time rather than realtime. If reinit
detects a change for presist.logd.timestamp, correct the older entry
timestamps in place.

ToDo: A corner case condition where new log entries in monotonic time
      occur before logd reinit detects persist.logd.timestamp, there
      will be a few out-of-order entries, but with accurate
      timestamps. This problem does not happen for ro.logd.timestamp
      as it is set before logd starts.

NB: This offers a nano second time accuracy on all log entries
    that may be more suitable for merging with other system
    activities, such as systrace, that also use monotonic time. This
    feature is for debugging.

Bug: 23668800
Change-Id: Iee6dab7140061b1a6627254921411f61b01aa5c2
2015-11-16 08:53:51 -08:00
..
tests logd: test modernization 2015-06-01 14:27:02 -07:00
Android.mk logd: statistics switch to std::string 2015-11-16 08:53:04 -08:00
CommandListener.cpp logd: clear return and deal with busy if readers locked 2015-11-16 08:53:04 -08:00
CommandListener.h Logd: Handle unused variable and fields 2015-11-16 08:53:04 -08:00
event.logtags logd: annotate worst-UID pruned entries 2015-04-10 15:45:08 -07:00
FlushCommand.cpp logd: logtimes switch to std::list 2015-08-20 11:30:49 -07:00
FlushCommand.h logd: replace internal CLOCK_MONOTONIC use with sequence numbers 2015-03-18 12:43:23 -07:00
libaudit.c Revert "libaudit: limit to 5 selinux denials per sec" 2015-05-11 15:43:25 -07:00
libaudit.h logd: throttle SELinux denials to 20/sec 2014-11-19 13:35:36 -08:00
LogAudit.cpp liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogAudit.h liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogBuffer.cpp liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogBuffer.h liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogBufferElement.cpp logd: object layer format statistics 2015-11-16 08:53:04 -08:00
LogBufferElement.h liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogCommand.cpp logd: clientHasLogCredentials false negatives 2015-11-16 08:53:04 -08:00
LogCommand.h logd: institute getGroups for socket credentials 2014-02-28 13:48:33 -08:00
LogKlog.cpp liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogKlog.h liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogListener.cpp logd: Cleanup 2015-05-13 09:22:56 -07:00
LogListener.h logd: initial checkin. 2014-02-26 09:52:35 -08:00
logpersist init.rc: logd: Add logpersistd (nee logcatd) 2015-06-02 15:28:36 -07:00
LogReader.cpp liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
LogReader.h logd: libsysutils: logd startup outside init environment 2014-04-17 16:14:24 +00:00
LogStatistics.cpp logd: statistics report chatty effective percentage 2015-11-16 08:53:04 -08:00
LogStatistics.h logd: statistics report chatty effective percentage 2015-11-16 08:53:04 -08:00
LogTimes.cpp logd: update region lock after entry has passed to reader socket 2015-11-16 08:53:04 -08:00
LogTimes.h logd: logtimes switch to std::list 2015-08-20 11:30:49 -07:00
LogUtils.h logd: optimize code hotspots 2015-11-16 08:53:04 -08:00
LogWhiteBlackList.cpp logd: Add support for *.logd.filter 2015-11-16 08:53:04 -08:00
LogWhiteBlackList.h logd: Add LogUtils.h 2015-11-16 08:53:04 -08:00
main.cpp liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00
README.auditd logd: selinux auditd initial commit 2014-04-07 10:51:00 -07:00
README.property liblog: logd: support logd.timestamp = monotonic 2015-11-16 08:53:51 -08:00

The properties that logd responds to are:

name                       type default  description
logd.auditd                 bool  true   Enable selinux audit daemon
logd.auditd.dmesg           bool  true   selinux audit messages duplicated and
                                         sent on to dmesg log
logd.klogd                  bool depends Enable klogd daemon
logd.statistics             bool depends Enable logcat -S statistics.
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   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>"
persist.logd.timestamp      string       The recording timestamp source. Default
                                         is ro.logd.timestamp. "m[onotonic]" is
                                         the only supported key character,
                                         otherwise assumes realtime.

NB:
- 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.