platform_system_core/logd
Mark Salyzyn 5e001776f4 logd: wakeup wrap timeout if realtime changes drastically
--wrap flag in logcat translates directly to the mTimeout inside logd,
the value set is ANDROID_LOG_WRAP_DEFAULT_TIMEOUT defined in
<log/log_read.h> as 7200 or 2 hours.  For a non blocking read with
a selected timeout, the logger waits until either the log buffer is
about to 'wrap' and prune the log entry, or at the specified timeout.
Non blocking in the logger context means that when there are no more
log entries, the socket is closed.

clock_gettime(CLOCK_REALTIME) is UTC 1970 epoch *NIX time. Is only
affected for time updates, not timezone or daylight savings time.
If there is a large user initiated time change, both the log entries
and the timeout mentioned above really get called into question, so we
trigger a release of the logs for clarity.  This is so that the log
reader can handle the disruptively updated time, and can immediately
check the local time if necessary.

The logger has a 5 second window for entries to land in time sorted
order into the logging list.  This should offer the log reader some
differentiation between logging order sequence for monotonically
increasing time, and sequence order in the face of user initiated time
adjustments that break monotonicity.

This change is about major time adjustments that can cause Fear,
Uncertainty or Doubt about log entries.  By returning, immediate action
can be taken, rather than having to comb through the logs with less
details about the time disruptions in hand.  The least it can do is
record what we have, and restart the call with a new tail time and
timeout.

Test: gTest liblog-unit-tests logcat-unit-test logd-unit-tests
Bug: 35373582
Change-Id: I92cac83be99d68634ffd4ebd2f3a3067cfd0e942
2017-03-17 14:17:55 +00:00
..
tests logd: specify clang format 2017-03-13 10:31:09 -07:00
.clang-format logd: specify clang format 2017-03-13 10:31:09 -07:00
Android.mk logd: add getEventTag command and service 2017-02-02 14:24:18 -08:00
CommandListener.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
CommandListener.h logd: specify clang format 2017-03-13 10:31:09 -07:00
event.logtags logd: add getEventTag command and service 2017-02-02 14:24:18 -08:00
FlushCommand.cpp logd: wakeup wrap timeout if realtime changes drastically 2017-03-17 14:17:55 +00:00
FlushCommand.h logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
libaudit.c logd: specify clang format 2017-03-13 10:31:09 -07:00
libaudit.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogAudit.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
LogAudit.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogBuffer.cpp logd: cap how far back in-place sort will go to 5 seconds 2017-03-17 14:17:38 +00:00
LogBuffer.h logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
LogBufferElement.cpp logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
LogBufferElement.h logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
LogCommand.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
LogCommand.h logd: specify clang format 2017-03-13 10:31:09 -07:00
logd.rc logd: add getEventTag command and service 2017-02-02 14:24:18 -08:00
LogKlog.cpp Logd: Fix wrong parameters 2017-03-14 20:43:43 -07:00
LogKlog.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogListener.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
LogListener.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogReader.cpp logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
LogReader.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogStatistics.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
LogStatistics.h logd: specify clang format 2017-03-13 10:31:09 -07:00
logtagd.rc logd: add getEventTag command and service 2017-02-02 14:24:18 -08:00
LogTags.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
LogTags.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogTimes.cpp logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
LogTimes.h logd: drop mSequence from LogBufferElement 2017-03-16 08:22:00 -07:00
LogUtils.h logd: specify clang format 2017-03-13 10:31:09 -07:00
LogWhiteBlackList.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
LogWhiteBlackList.h logd: specify clang format 2017-03-13 10:31:09 -07:00
main.cpp logd: specify clang format 2017-03-13 10:31:09 -07:00
README.auditd logd: selinux auditd initial commit 2014-04-07 10:51:00 -07:00
README.property logd: Add support for ro.logd.auditd.[main|events] 2017-01-03 09:44:42 -08:00

The properties that logd and friends react to are:

name                       type default  description
ro.logd.auditd             bool   true   Enable selinux audit daemon
ro.logd.auditd.dmesg       bool   true   selinux audit messages sent to dmesg.
ro.logd.auditd.main        bool   true   selinux audit messages sent to main.
ro.logd.auditd.events      bool   true   selinux audit messages sent to events.
persist.logd.security      bool   false  Enable security buffer.
ro.device_owner            bool   false  Override persist.logd.security to false
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.
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>
ro.logd.size               number svelte default for persist.logd.size. Larger
                                         platform default sizes than 256KB are
                                         known to not scale well under log spam
                                         pressure. Address the spam first,
                                         resist increasing the log buffer.
persist.logd.size.<buffer> number  ro    Size of the buffer for <buffer> log
ro.logd.size.<buffer>      number svelte default for persist.logd.size.<buffer>
ro.config.low_ram          bool   false  if true, logd.statistics, logd.kernel
                                         default false, logd.size 64K instead
                                         of 256K.
persist.logd.filter        string        Pruning filter to optimize content.
                                         At runtime use: logcat -P "<string>"
ro.logd.filter       string "~! ~1000/!" default for persist.logd.filter.
                                         This default means to prune the
                                         oldest entries of chattiest UID, and
                                         the chattiest PID of system
                                         (1000, or AID_SYSTEM).
persist.logd.timestamp     string  ro    The recording timestamp source.
                                         "m[onotonic]" is the only supported
                                         key character, otherwise realtime.
ro.logd.timestamp        string realtime default for persist.logd.timestamp
log.tag                   string persist The global logging level, VERBOSE,
                                         DEBUG, INFO, WARN, ERROR, ASSERT or
                                         SILENT. Only the first character is
                                         the key character.
persist.log.tag            string build  default for log.tag
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).
- svelte - see ro.config.low_ram for details.
- svelte+ - see ro.config.low_ram and ro.debuggable for details.
- ro - <base property> temporary override, ro.<base property> platform default.
- persist - <base property> override, persist.<base property> platform default.
- build - VERBOSE for native, DEBUG for jvm isLoggable, or developer option.
- 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 or PID may be a '!' to instead reference the chattiest
  client, with the restriction that the PID must be in the UID group 1000
  (system or AID_SYSTEM).