diff options
author | Dan Albert <danalbert@google.com> | 2015-03-27 11:20:14 -0700 |
---|---|---|
committer | Dan Albert <danalbert@google.com> | 2015-04-03 10:14:48 -0700 |
commit | 0c055863ebb57c3446897e89c2c39a67442c1be4 (patch) | |
tree | d6bc0c15d5b17bb7f2592c097e3e2fdd73dc8b37 /base/logging.cpp | |
parent | 8ea5dd8c6e14e889e917a7e51a1b62bd49ca1dab (diff) | |
download | system_core-0c055863ebb57c3446897e89c2c39a67442c1be4.zip system_core-0c055863ebb57c3446897e89c2c39a67442c1be4.tar.gz system_core-0c055863ebb57c3446897e89c2c39a67442c1be4.tar.bz2 |
Support logging to other log buffers.
LOGTO(dest, severity) and PLOGTO(dest, severity) log to other log
buffers. For example, `LOGTO(SYSTEM, FATAL) << "Foobar";`.
Change-Id: Id1ca1c8fdae72d69b73945ae9b006525d0be1582
Diffstat (limited to 'base/logging.cpp')
-rw-r--r-- | base/logging.cpp | 40 |
1 files changed, 28 insertions, 12 deletions
diff --git a/base/logging.cpp b/base/logging.cpp index 144388a..d2318cb 100644 --- a/base/logging.cpp +++ b/base/logging.cpp @@ -128,9 +128,13 @@ void InitLogging(char* argv[]) { // checks/logging in a function. class LogMessageData { public: - LogMessageData(const char* file, unsigned int line, LogSeverity severity, - int error) - : file_(file), line_number_(line), severity_(severity), error_(error) { + LogMessageData(const char* file, unsigned int line, LogId id, + LogSeverity severity, int error) + : file_(file), + line_number_(line), + id_(id), + severity_(severity), + error_(error) { const char* last_slash = strrchr(file, '/'); file = (last_slash == nullptr) ? file : last_slash + 1; } @@ -147,6 +151,10 @@ class LogMessageData { return severity_; } + LogId GetId() const { + return id_; + } + int GetError() const { return error_; } @@ -163,15 +171,16 @@ class LogMessageData { std::ostringstream buffer_; const char* const file_; const unsigned int line_number_; + const LogId id_; const LogSeverity severity_; const int error_; DISALLOW_COPY_AND_ASSIGN(LogMessageData); }; -LogMessage::LogMessage(const char* file, unsigned int line, +LogMessage::LogMessage(const char* file, unsigned int line, LogId id, LogSeverity severity, int error) - : data_(new LogMessageData(file, line, severity, error)) { + : data_(new LogMessageData(file, line, id, severity, error)) { } LogMessage::~LogMessage() { @@ -189,16 +198,16 @@ LogMessage::~LogMessage() { { std::lock_guard<std::mutex> lock(logging_lock); if (msg.find('\n') == std::string::npos) { - LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetSeverity(), - msg.c_str()); + LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetId(), + data_->GetSeverity(), msg.c_str()); } else { msg += '\n'; size_t i = 0; while (i < msg.size()) { size_t nl = msg.find('\n', i); msg[nl] = '\0'; - LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetSeverity(), - &msg[i]); + LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetId(), + data_->GetSeverity(), &msg[i]); i = nl + 1; } } @@ -224,19 +233,26 @@ static const android_LogPriority kLogSeverityToAndroidLogPriority[] = { static_assert(arraysize(kLogSeverityToAndroidLogPriority) == FATAL + 1, "Mismatch in size of kLogSeverityToAndroidLogPriority and values " "in LogSeverity"); + +static const log_id kLogIdToAndroidLogId[] = {LOG_ID_MAIN, LOG_ID_SYSTEM}; +static_assert(arraysize(kLogIdToAndroidLogId) == SYSTEM + 1, + "Mismatch in size of kLogIdToAndroidLogId and values " + "in LogSeverity"); #endif -void LogMessage::LogLine(const char* file, unsigned int line, +void LogMessage::LogLine(const char* file, unsigned int line, LogId id, LogSeverity log_severity, const char* message) { #ifdef __ANDROID__ const char* tag = ProgramInvocationShortName(); int priority = kLogSeverityToAndroidLogPriority[log_severity]; + log_id lg_id = kLogIdToAndroidLogId[id]; if (priority == ANDROID_LOG_FATAL) { - LOG_PRI(priority, tag, "%s:%u] %s", file, line, message); + __android_log_buf_print(lg_id, priority, tag, "%s:%u] %s", file, line, message); } else { - LOG_PRI(priority, tag, "%s", message); + __android_log_buf_print(lg_id, priority, tag, "%s", message); } #else + UNUSED(id); static const char* log_characters = "VDIWEF"; CHECK_EQ(strlen(log_characters), FATAL + 1U); char severity = log_characters[log_severity]; |