You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
2.8 KiB
110 lines
2.8 KiB
// |
|
// Logging support functions. These are designed to mimic those used in |
|
// chromium_org/base in terms of interface, but to redirect error to |
|
// the system log. |
|
// |
|
|
|
#define LOG_TAG "perf_reader" |
|
|
|
#include "quipper/base/logging.h" |
|
|
|
#if defined(OS_POSIX) |
|
#include <errno.h> |
|
#include <pthread.h> |
|
#include <stdio.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <unistd.h> |
|
#endif |
|
|
|
#include <algorithm> |
|
#include <cstring> |
|
#include <ctime> |
|
#include <iomanip> |
|
#include <ostream> |
|
#include <string> |
|
|
|
#include <android/log.h> |
|
|
|
namespace logging { |
|
|
|
namespace { |
|
|
|
int min_log_level = 0; |
|
|
|
} |
|
|
|
void SetMinLogLevel(int level) { |
|
min_log_level = std::min(LOG_FATAL, level); |
|
} |
|
|
|
int GetMinLogLevel() { |
|
return min_log_level; |
|
} |
|
|
|
// MSVC doesn't like complex extern templates and DLLs. |
|
#if !defined(COMPILER_MSVC) |
|
// Explicit instantiations for commonly used comparisons. |
|
template std::string* MakeCheckOpString<int, int>( |
|
const int&, const int&, const char* names); |
|
template std::string* MakeCheckOpString<unsigned long, unsigned long>( |
|
const unsigned long&, const unsigned long&, const char* names); |
|
template std::string* MakeCheckOpString<unsigned long, unsigned int>( |
|
const unsigned long&, const unsigned int&, const char* names); |
|
template std::string* MakeCheckOpString<unsigned int, unsigned long>( |
|
const unsigned int&, const unsigned long&, const char* names); |
|
template std::string* MakeCheckOpString<std::string, std::string>( |
|
const std::string&, const std::string&, const char* name); |
|
#endif |
|
|
|
LogMessage::LogMessage(const char* file, int line, LogSeverity severity) |
|
: severity_(severity), file_(file), line_(line) { |
|
Init(file, line); |
|
} |
|
|
|
LogMessage::LogMessage(const char* file, int line, std::string* result) |
|
: severity_(LOG_FATAL), file_(file), line_(line) { |
|
Init(file, line); |
|
stream_ << "Check failed: " << *result; |
|
delete result; |
|
} |
|
|
|
LogMessage::LogMessage(const char* file, int line, LogSeverity severity, |
|
std::string* result) |
|
: severity_(severity), file_(file), line_(line) { |
|
Init(file, line); |
|
stream_ << "Check failed: " << *result; |
|
delete result; |
|
} |
|
|
|
LogMessage::~LogMessage() { |
|
stream_ << std::endl; |
|
std::string str_newline(stream_.str()); |
|
|
|
android_LogPriority priority = |
|
(severity_ < 0) ? ANDROID_LOG_VERBOSE : ANDROID_LOG_UNKNOWN; |
|
switch (severity_) { |
|
case LOG_INFO: |
|
priority = ANDROID_LOG_INFO; |
|
break; |
|
case LOG_WARNING: |
|
priority = ANDROID_LOG_WARN; |
|
break; |
|
case LOG_ERROR: |
|
priority = ANDROID_LOG_ERROR; |
|
break; |
|
case LOG_FATAL: |
|
priority = ANDROID_LOG_FATAL; |
|
break; |
|
} |
|
__android_log_write(priority, LOG_TAG, str_newline.c_str()); |
|
|
|
if (severity_ == LOG_FATAL) { |
|
exit(9); |
|
} |
|
} |
|
|
|
void LogMessage::Init(const char* /* file */, int /* line */) { |
|
} |
|
|
|
} // namespace logging
|
|
|