// // 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. // #include "quipper/base/logging.h" #if defined(OS_POSIX) #include #include #include #include #include #include #endif #include #include #include #include #include #include #include #define LOG_TAG "perf_reader" 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( const int&, const int&, const char* names); template std::string* MakeCheckOpString( const unsigned long&, const unsigned long&, const char* names); template std::string* MakeCheckOpString( const unsigned long&, const unsigned int&, const char* names); template std::string* MakeCheckOpString( const unsigned int&, const unsigned long&, const char* names); template std::string* MakeCheckOpString( 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