Add last logcat data to incident report

Bug: 142721354
Test: adb sehll incident -p EXPLICIT 1109
Change-Id: Iaee370310e36998e161955e0f12d98ac8cd8eb90
This commit is contained in:
zhouwenjie
2019-10-30 14:31:54 -07:00
parent 68be4332ae
commit c3bf8040a3
4 changed files with 77 additions and 17 deletions

View File

@@ -476,10 +476,27 @@ status_t DumpsysSection::BlockingCall(int pipeWriteFd) const {
// initialization only once in Section.cpp.
map<log_id_t, log_time> LogSection::gLastLogsRetrieved;
LogSection::LogSection(int id, log_id_t logID) : WorkerThreadSection(id), mLogID(logID) {
name = "logcat ";
name += android_log_id_to_name(logID);
switch (logID) {
LogSection::LogSection(int id, const char* logID, ...) : WorkerThreadSection(id), mLogMode(logModeBase) {
name = "logcat -b ";
name += logID;
va_list args;
va_start(args, logID);
mLogID = android_name_to_log_id(logID);
while(true) {
const char* arg = va_arg(args, const char*);
if (arg == NULL) {
break;
}
if (!strcmp(arg, "-L")) {
// Read from last logcat buffer
mLogMode = mLogMode | ANDROID_LOG_PSTORE;
}
name += " ";
name += arg;
}
switch (mLogID) {
case LOG_ID_EVENTS:
case LOG_ID_STATS:
case LOG_ID_SECURITY:
@@ -512,9 +529,8 @@ status_t LogSection::BlockingCall(int pipeWriteFd) const {
// Open log buffer and getting logs since last retrieved time if any.
unique_ptr<logger_list, void (*)(logger_list*)> loggers(
gLastLogsRetrieved.find(mLogID) == gLastLogsRetrieved.end()
? android_logger_list_alloc(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0)
: android_logger_list_alloc_time(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK,
gLastLogsRetrieved[mLogID], 0),
? android_logger_list_alloc(mLogMode, 0, 0)
: android_logger_list_alloc_time(mLogMode, gLastLogsRetrieved[mLogID], 0),
android_logger_list_free);
if (android_logger_open(loggers.get(), mLogID) == NULL) {

View File

@@ -146,8 +146,11 @@ class LogSection : public WorkerThreadSection {
// global last log retrieved timestamp for each log_id_t.
static map<log_id_t, log_time> gLastLogsRetrieved;
// log mode: read only & non blocking.
const static int logModeBase = ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK;
public:
LogSection(int id, log_id_t logID);
LogSection(int id, const char* logID, ...);
virtual ~LogSection();
virtual status_t BlockingCall(int pipeWriteFd) const;
@@ -155,6 +158,7 @@ public:
private:
log_id_t mLogID;
bool mBinary;
int mLogMode;
};
/**

View File

@@ -87,42 +87,80 @@ message IncidentProto {
optional android.util.LogProto main_logs = 1101 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_MAIN"
(section).args = "main"
];
optional android.util.LogProto radio_logs = 1102 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_RADIO"
(section).args = "radio"
];
optional android.util.LogProto events_logs = 1103 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_EVENTS"
(section).args = "events"
];
optional android.util.LogProto system_logs = 1104 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_SYSTEM"
(section).args = "system"
];
optional android.util.LogProto crash_logs = 1105 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_CRASH"
(section).args = "crash"
];
optional android.util.LogProto stats_logs = 1106 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_STATS"
(section).args = "stats"
];
optional android.util.LogProto security_logs = 1107 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_SECURITY"
(section).args = "security"
];
optional android.util.LogProto kernel_logs = 1108 [
(section).type = SECTION_LOG,
(section).args = "LOG_ID_KERNEL"
(section).args = "kernel"
];
// Last logcat sections.
// Note that kernel logs is not persisted since it's contained in last kmsg.
optional android.util.LogProto last_main_logs = 1109 [
(section).type = SECTION_LOG,
(section).args = "main -L"
];
optional android.util.LogProto last_radio_logs = 1110 [
(section).type = SECTION_LOG,
(section).args = "radio -L"
];
optional android.util.LogProto last_events_logs = 1111 [
(section).type = SECTION_LOG,
(section).args = "events -L"
];
optional android.util.LogProto last_system_logs = 1112 [
(section).type = SECTION_LOG,
(section).args = "system -L"
];
optional android.util.LogProto last_crash_logs = 1113 [
(section).type = SECTION_LOG,
(section).args = "crash -L"
];
optional android.util.LogProto last_stats_logs = 1114 [
(section).type = SECTION_LOG,
(section).args = "stats -L"
];
// security logs is only available with "Device Owner" mode
optional android.util.LogProto last_security_logs = 1115 [
(section).type = SECTION_LOG,
(section).args = "security -L"
];
// Stack dumps

View File

@@ -436,7 +436,9 @@ static bool generateSectionListCpp(Descriptor const* descriptor) {
printf(" NULL),\n");
break;
case SECTION_LOG:
printf(" new LogSection(%d, %s),\n", field->number(), s.args().c_str());
printf(" new LogSection(%d, ", field->number());
splitAndPrint(s.args());
printf(" NULL),\n");
break;
case SECTION_GZIP:
printf(" new GZipSection(%d,", field->number());