From 0175b0747a1f55329109e84c9a1322dcb95e2848 Mon Sep 17 00:00:00 2001 From: Mark Salyzyn Date: Wed, 26 Feb 2014 09:50:16 -0800 Subject: logd: initial checkin. * Create a new userspace log daemon for handling logging messages. Original-Change-Id: I75267df16359684490121e6c31cca48614d79856 Signed-off-by: Nick Kralevich * Merge conflicts * rename new syslog daemon to logd to prevent confusion with bionic syslog * replace racy getGroups call with KISS call to client->getGid() * Timestamps are filed at logging source * insert entries into list in timestamp order * Added LogTimeEntry tail filtration handling * Added region locking around LogWriter list * separate threads for each writer * /dev/socket/logd* permissions Signed-off-by: Mark Salyzyn (cherry picked from commit 3e76e0a49760c4970b7cda6153e51026af98e4f3) Author: Nick Kralevich Change-Id: Ice88b1412d8f9daa7f9119b2b5aaf684a5e28098 --- include/log/log_read.h | 6 +++--- include/log/logger.h | 22 +++++++++++++++++----- include/private/android_filesystem_config.h | 2 ++ 3 files changed, 22 insertions(+), 8 deletions(-) (limited to 'include') diff --git a/include/log/log_read.h b/include/log/log_read.h index 861c192..2601622 100644 --- a/include/log/log_read.h +++ b/include/log/log_read.h @@ -23,12 +23,12 @@ #ifdef __cplusplus struct log_time : public timespec { public: - log_time(timespec &T) + log_time(const timespec &T) { tv_sec = T.tv_sec; tv_nsec = T.tv_nsec; } - log_time(void) + log_time() { } log_time(clockid_t id) @@ -67,7 +67,7 @@ public: { return !(*this > T); } - uint64_t nsec(void) const + uint64_t nsec() const { return static_cast(tv_sec) * NS_PER_SEC + tv_nsec; } diff --git a/include/log/logger.h b/include/log/logger.h index 966397a..6414d84 100644 --- a/include/log/logger.h +++ b/include/log/logger.h @@ -35,7 +35,7 @@ struct logger_entry { /* * The userspace structure for version 2 of the logger_entry ABI. * This structure is returned to userspace if ioctl(LOGGER_SET_VERSION) - * is called with version==2 + * is called with version==2; or used with the user space log daemon. */ struct logger_entry_v2 { uint16_t len; /* length of the payload */ @@ -48,6 +48,17 @@ struct logger_entry_v2 { char msg[0]; /* the entry's payload */ }; +struct logger_entry_v3 { + uint16_t len; /* length of the payload */ + uint16_t hdr_size; /* sizeof(struct logger_entry_v2) */ + int32_t pid; /* generating process's pid */ + int32_t tid; /* generating process's tid */ + int32_t sec; /* seconds since Epoch */ + int32_t nsec; /* nanoseconds */ + uint32_t lid; /* log id of the payload */ + char msg[0]; /* the entry's payload */ +}; + /* * The maximum size of the log entry payload that can be * written to the kernel logger driver. An attempt to write @@ -69,6 +80,7 @@ struct log_msg { union { unsigned char buf[LOGGER_ENTRY_MAX_LEN + 1]; struct logger_entry_v2 entry; + struct logger_entry_v3 entry_v3; struct logger_entry_v2 entry_v2; struct logger_entry entry_v1; struct { @@ -106,21 +118,21 @@ struct log_msg { { return !(*this > T); } - uint64_t nsec(void) const + uint64_t nsec() const { return static_cast(entry.sec) * NS_PER_SEC + entry.nsec; } /* packet methods */ - log_id_t id(void) + log_id_t id() { return extra.id; } - char *msg(void) + char *msg() { return entry.hdr_size ? (char *) buf + entry.hdr_size : entry_v1.msg; } - unsigned int len(void) + unsigned int len() { return (entry.hdr_size ? entry.hdr_size : sizeof(entry_v1)) + entry.len; } diff --git a/include/private/android_filesystem_config.h b/include/private/android_filesystem_config.h index 0ed0d78..9c26baf 100644 --- a/include/private/android_filesystem_config.h +++ b/include/private/android_filesystem_config.h @@ -76,6 +76,7 @@ #define AID_SDCARD_PICS 1033 /* external storage photos access */ #define AID_SDCARD_AV 1034 /* external storage audio/video access */ #define AID_SDCARD_ALL 1035 /* access all users external storage */ +#define AID_LOGD 1036 /* log daemon */ #define AID_SHELL 2000 /* adb and debug shell user */ #define AID_CACHE 2001 /* cache access */ @@ -151,6 +152,7 @@ static const struct android_id_info android_ids[] = { { "sdcard_pics", AID_SDCARD_PICS, }, { "sdcard_av", AID_SDCARD_AV, }, { "sdcard_all", AID_SDCARD_ALL, }, + { "logd", AID_LOGD, }, { "shell", AID_SHELL, }, { "cache", AID_CACHE, }, -- cgit v1.1