110 lines
2.8 KiB
C++
110 lines
2.8 KiB
C++
//
|
|
// 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
|