diff options
Diffstat (limited to 'runtime/base/logging.cc')
-rw-r--r-- | runtime/base/logging.cc | 31 |
1 files changed, 21 insertions, 10 deletions
diff --git a/runtime/base/logging.cc b/runtime/base/logging.cc index 7a620e375b..212e5bd922 100644 --- a/runtime/base/logging.cc +++ b/runtime/base/logging.cc @@ -185,14 +185,15 @@ class LogMessageData { LogMessage::LogMessage(const char* file, unsigned int line, LogSeverity severity, int error) : data_(new LogMessageData(file, line, severity, error)) { if (PrintDirectly(severity)) { - static const char* log_characters = "VDIWEFF"; - CHECK_EQ(strlen(log_characters), INTERNAL_FATAL + 1U); - stream() << ProgramInvocationShortName() << " " << log_characters[static_cast<size_t>(severity)] + static constexpr char kLogCharacters[] = { 'N', 'V', 'D', 'I', 'W', 'E', 'F', 'F' }; + static_assert(arraysize(kLogCharacters) == static_cast<size_t>(INTERNAL_FATAL) + 1, + "Wrong character array size"); + stream() << ProgramInvocationShortName() << " " << kLogCharacters[static_cast<size_t>(severity)] << " " << getpid() << " " << ::art::GetTid() << " " << file << ":" << line << "]"; } } LogMessage::~LogMessage() { - if (!PrintDirectly(data_->GetSeverity())) { + if (!PrintDirectly(data_->GetSeverity()) && data_->GetSeverity() != LogSeverity::NONE) { if (data_->GetSeverity() < gMinimumLogSeverity) { return; // No need to format something we're not going to output. } @@ -236,6 +237,7 @@ std::ostream& LogMessage::stream() { #ifdef __ANDROID__ static const android_LogPriority kLogSeverityToAndroidLogPriority[] = { + ANDROID_LOG_VERBOSE, // NONE, use verbose as stand-in, will never be printed. ANDROID_LOG_VERBOSE, ANDROID_LOG_DEBUG, ANDROID_LOG_INFO, ANDROID_LOG_WARN, ANDROID_LOG_ERROR, ANDROID_LOG_FATAL, ANDROID_LOG_FATAL }; @@ -245,16 +247,20 @@ static_assert(arraysize(kLogSeverityToAndroidLogPriority) == INTERNAL_FATAL + 1, void LogMessage::LogLine(const char* file, unsigned int line, LogSeverity log_severity, const char* message) { + if (log_severity == LogSeverity::NONE) { + return; + } + #ifdef __ANDROID__ const char* tag = ProgramInvocationShortName(); - int priority = kLogSeverityToAndroidLogPriority[log_severity]; + int priority = kLogSeverityToAndroidLogPriority[static_cast<size_t>(log_severity)]; if (priority == ANDROID_LOG_FATAL) { LOG_PRI(priority, tag, "%s:%u] %s", file, line, message); } else { LOG_PRI(priority, tag, "%s", message); } #else - static const char* log_characters = "VDIWEFF"; + static const char* log_characters = "NVDIWEFF"; CHECK_EQ(strlen(log_characters), INTERNAL_FATAL + 1U); char severity = log_characters[log_severity]; fprintf(stderr, "%s %c %5d %5d %s:%u] %s\n", @@ -264,10 +270,14 @@ void LogMessage::LogLine(const char* file, unsigned int line, LogSeverity log_se void LogMessage::LogLineLowStack(const char* file, unsigned int line, LogSeverity log_severity, const char* message) { + if (log_severity == LogSeverity::NONE) { + return; + } + #ifdef __ANDROID__ // Use android_writeLog() to avoid stack-based buffers used by android_printLog(). const char* tag = ProgramInvocationShortName(); - int priority = kLogSeverityToAndroidLogPriority[log_severity]; + int priority = kLogSeverityToAndroidLogPriority[static_cast<size_t>(log_severity)]; char* buf = nullptr; size_t buf_size = 0u; if (priority == ANDROID_LOG_FATAL) { @@ -285,13 +295,14 @@ void LogMessage::LogLineLowStack(const char* file, unsigned int line, LogSeverit android_writeLog(priority, tag, message); } #else - static const char* log_characters = "VDIWEFF"; - CHECK_EQ(strlen(log_characters), INTERNAL_FATAL + 1U); + static constexpr char kLogCharacters[] = { 'N', 'V', 'D', 'I', 'W', 'E', 'F', 'F' }; + static_assert(arraysize(kLogCharacters) == static_cast<size_t>(INTERNAL_FATAL) + 1, + "Wrong character array size"); const char* program_name = ProgramInvocationShortName(); TEMP_FAILURE_RETRY(write(STDERR_FILENO, program_name, strlen(program_name))); TEMP_FAILURE_RETRY(write(STDERR_FILENO, " ", 1)); - TEMP_FAILURE_RETRY(write(STDERR_FILENO, &log_characters[log_severity], 1)); + TEMP_FAILURE_RETRY(write(STDERR_FILENO, &kLogCharacters[static_cast<size_t>(log_severity)], 1)); TEMP_FAILURE_RETRY(write(STDERR_FILENO, " ", 1)); // TODO: pid and tid. TEMP_FAILURE_RETRY(write(STDERR_FILENO, file, strlen(file))); |