base: remove LOG_TO(), PLOG_TO() and LOG_STREAM_TO() macros
There were only two users of these and both of them were better off setting up a default logger. These macros are not particularly useful as it's not useful for a single program to write to both the MAIN and SYSTEM logs. In fact, the opposite of these macros would be more beneficial: having more programs write to only the MAIN or only the SYSTEM buffer, so getting rid of these macros removes a temptation for bad behavior. Users that absolutely need to do this behavior can still use the liblog macros or functions, but that should be an extreme edge case, such as the few programs that write to the CRASH buffer and does not need to exist in libbase. Bug: 119867234 Test: build Change-Id: I23369c3b48ed636b617220cab47f77fdd5559763
This commit is contained in:
parent
b8c1147c4a
commit
d044eaa4e7
2 changed files with 44 additions and 58 deletions
|
@ -222,20 +222,16 @@ struct LogAbortAfterFullExpr {
|
|||
// 1) This will not check whether the severity is high enough. One should use WOULD_LOG to filter
|
||||
// usage manually.
|
||||
// 2) This does not save and restore errno.
|
||||
#define LOG_STREAM(severity) LOG_STREAM_TO(DEFAULT, severity)
|
||||
|
||||
// Get an ostream that can be used for logging at the given severity and to the
|
||||
// given destination. The same notes as for LOG_STREAM apply.
|
||||
#define LOG_STREAM_TO(dest, severity) \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::dest, \
|
||||
SEVERITY_LAMBDA(severity), _LOG_TAG_INTERNAL, -1) \
|
||||
#define LOG_STREAM(severity) \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, SEVERITY_LAMBDA(severity), _LOG_TAG_INTERNAL, \
|
||||
-1) \
|
||||
.stream()
|
||||
|
||||
// Logs a message to logcat on Android otherwise to stderr. If the severity is
|
||||
// FATAL it also causes an abort. For example:
|
||||
//
|
||||
// LOG(FATAL) << "We didn't expect to reach here";
|
||||
#define LOG(severity) LOG_TO(DEFAULT, severity)
|
||||
#define LOG(severity) LOGGING_PREAMBLE(severity) && LOG_STREAM(severity)
|
||||
|
||||
// Checks if we want to log something, and sets up appropriate RAII objects if
|
||||
// so.
|
||||
|
@ -245,21 +241,12 @@ struct LogAbortAfterFullExpr {
|
|||
ABORT_AFTER_LOG_EXPR_IF((SEVERITY_LAMBDA(severity)) == ::android::base::FATAL, true) && \
|
||||
::android::base::ErrnoRestorer())
|
||||
|
||||
// Logs a message to logcat with the specified log ID on Android otherwise to
|
||||
// stderr. If the severity is FATAL it also causes an abort.
|
||||
// Use an expression here so we can support the << operator following the macro,
|
||||
// like "LOG(DEBUG) << xxx;".
|
||||
#define LOG_TO(dest, severity) LOGGING_PREAMBLE(severity) && LOG_STREAM_TO(dest, severity)
|
||||
|
||||
// A variant of LOG that also logs the current errno value. To be used when
|
||||
// library calls fail.
|
||||
#define PLOG(severity) PLOG_TO(DEFAULT, severity)
|
||||
|
||||
// Behaves like PLOG, but logs to the specified log ID.
|
||||
#define PLOG_TO(dest, severity) \
|
||||
LOGGING_PREAMBLE(severity) && \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::dest, \
|
||||
SEVERITY_LAMBDA(severity), _LOG_TAG_INTERNAL, errno) \
|
||||
#define PLOG(severity) \
|
||||
LOGGING_PREAMBLE(severity) && \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, SEVERITY_LAMBDA(severity), \
|
||||
_LOG_TAG_INTERNAL, errno) \
|
||||
.stream()
|
||||
|
||||
// Marker that code is yet to be implemented.
|
||||
|
@ -272,24 +259,23 @@ struct LogAbortAfterFullExpr {
|
|||
//
|
||||
// CHECK(false == true) results in a log message of
|
||||
// "Check failed: false == true".
|
||||
#define CHECK(x) \
|
||||
LIKELY((x)) || ABORT_AFTER_LOG_FATAL_EXPR(false) || \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::DEFAULT, \
|
||||
::android::base::FATAL, _LOG_TAG_INTERNAL, -1) \
|
||||
.stream() \
|
||||
#define CHECK(x) \
|
||||
LIKELY((x)) || ABORT_AFTER_LOG_FATAL_EXPR(false) || \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::FATAL, _LOG_TAG_INTERNAL, \
|
||||
-1) \
|
||||
.stream() \
|
||||
<< "Check failed: " #x << " "
|
||||
|
||||
// clang-format off
|
||||
// Helper for CHECK_xx(x,y) macros.
|
||||
#define CHECK_OP(LHS, RHS, OP) \
|
||||
for (auto _values = ::android::base::MakeEagerEvaluator(LHS, RHS); \
|
||||
UNLIKELY(!(_values.lhs OP _values.rhs)); \
|
||||
/* empty */) \
|
||||
ABORT_AFTER_LOG_FATAL \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::DEFAULT, \
|
||||
::android::base::FATAL, _LOG_TAG_INTERNAL, -1) \
|
||||
.stream() \
|
||||
<< "Check failed: " << #LHS << " " << #OP << " " << #RHS << " (" #LHS "=" << _values.lhs \
|
||||
#define CHECK_OP(LHS, RHS, OP) \
|
||||
for (auto _values = ::android::base::MakeEagerEvaluator(LHS, RHS); \
|
||||
UNLIKELY(!(_values.lhs OP _values.rhs)); \
|
||||
/* empty */) \
|
||||
ABORT_AFTER_LOG_FATAL \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::FATAL, _LOG_TAG_INTERNAL, -1) \
|
||||
.stream() \
|
||||
<< "Check failed: " << #LHS << " " << #OP << " " << #RHS << " (" #LHS "=" << _values.lhs \
|
||||
<< ", " #RHS "=" << _values.rhs << ") "
|
||||
// clang-format on
|
||||
|
||||
|
@ -311,8 +297,8 @@ struct LogAbortAfterFullExpr {
|
|||
#define CHECK_STROP(s1, s2, sense) \
|
||||
while (UNLIKELY((strcmp(s1, s2) == 0) != (sense))) \
|
||||
ABORT_AFTER_LOG_FATAL \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::DEFAULT, \
|
||||
::android::base::FATAL, _LOG_TAG_INTERNAL, -1) \
|
||||
::android::base::LogMessage(__FILE__, __LINE__, ::android::base::FATAL, \
|
||||
_LOG_TAG_INTERNAL, -1) \
|
||||
.stream() \
|
||||
<< "Check failed: " << "\"" << (s1) << "\"" \
|
||||
<< ((sense) ? " == " : " != ") << "\"" << (s2) << "\""
|
||||
|
@ -431,8 +417,10 @@ class LogMessageData;
|
|||
// of a CHECK. The destructor will abort if the severity is FATAL.
|
||||
class LogMessage {
|
||||
public:
|
||||
LogMessage(const char* file, unsigned int line, LogId id, LogSeverity severity, const char* tag,
|
||||
// LogId has been deprecated, but this constructor must exist for prebuilts.
|
||||
LogMessage(const char* file, unsigned int line, LogId, LogSeverity severity, const char* tag,
|
||||
int error);
|
||||
LogMessage(const char* file, unsigned int line, LogSeverity severity, const char* tag, int error);
|
||||
|
||||
~LogMessage();
|
||||
|
||||
|
@ -441,8 +429,8 @@ class LogMessage {
|
|||
std::ostream& stream();
|
||||
|
||||
// The routine that performs the actual logging.
|
||||
static void LogLine(const char* file, unsigned int line, LogId id, LogSeverity severity,
|
||||
const char* tag, const char* msg);
|
||||
static void LogLine(const char* file, unsigned int line, LogSeverity severity, const char* tag,
|
||||
const char* msg);
|
||||
|
||||
private:
|
||||
const std::unique_ptr<LogMessageData> data_;
|
||||
|
|
|
@ -350,11 +350,10 @@ void SetAborter(AbortFunction&& aborter) {
|
|||
// checks/logging in a function.
|
||||
class LogMessageData {
|
||||
public:
|
||||
LogMessageData(const char* file, unsigned int line, LogId id, LogSeverity severity,
|
||||
const char* tag, int error)
|
||||
LogMessageData(const char* file, unsigned int line, LogSeverity severity, const char* tag,
|
||||
int error)
|
||||
: file_(GetFileBasename(file)),
|
||||
line_number_(line),
|
||||
id_(id),
|
||||
severity_(severity),
|
||||
tag_(tag),
|
||||
error_(error) {}
|
||||
|
@ -373,10 +372,6 @@ class LogMessageData {
|
|||
|
||||
const char* GetTag() const { return tag_; }
|
||||
|
||||
LogId GetId() const {
|
||||
return id_;
|
||||
}
|
||||
|
||||
int GetError() const {
|
||||
return error_;
|
||||
}
|
||||
|
@ -393,7 +388,6 @@ class LogMessageData {
|
|||
std::ostringstream buffer_;
|
||||
const char* const file_;
|
||||
const unsigned int line_number_;
|
||||
const LogId id_;
|
||||
const LogSeverity severity_;
|
||||
const char* const tag_;
|
||||
const int error_;
|
||||
|
@ -401,9 +395,13 @@ class LogMessageData {
|
|||
DISALLOW_COPY_AND_ASSIGN(LogMessageData);
|
||||
};
|
||||
|
||||
LogMessage::LogMessage(const char* file, unsigned int line, LogId id, LogSeverity severity,
|
||||
LogMessage::LogMessage(const char* file, unsigned int line, LogId, LogSeverity severity,
|
||||
const char* tag, int error)
|
||||
: data_(new LogMessageData(file, line, id, severity, tag, error)) {}
|
||||
: LogMessage(file, line, severity, tag, error) {}
|
||||
|
||||
LogMessage::LogMessage(const char* file, unsigned int line, LogSeverity severity, const char* tag,
|
||||
int error)
|
||||
: data_(new LogMessageData(file, line, severity, tag, error)) {}
|
||||
|
||||
LogMessage::~LogMessage() {
|
||||
// Check severity again. This is duplicate work wrt/ LOG macros, but not LOG_STREAM.
|
||||
|
@ -429,16 +427,16 @@ LogMessage::~LogMessage() {
|
|||
// Do the actual logging with the lock held.
|
||||
std::lock_guard<std::mutex> lock(LoggingLock());
|
||||
if (msg.find('\n') == std::string::npos) {
|
||||
LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetId(), data_->GetSeverity(),
|
||||
data_->GetTag(), msg.c_str());
|
||||
LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetSeverity(), data_->GetTag(),
|
||||
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_->GetId(), data_->GetSeverity(),
|
||||
data_->GetTag(), &msg[i]);
|
||||
LogLine(data_->GetFile(), data_->GetLineNumber(), data_->GetSeverity(), data_->GetTag(),
|
||||
&msg[i]);
|
||||
// Undo the zero-termination so we can give the complete message to the aborter.
|
||||
msg[nl] = '\n';
|
||||
i = nl + 1;
|
||||
|
@ -456,16 +454,16 @@ std::ostream& LogMessage::stream() {
|
|||
return data_->GetBuffer();
|
||||
}
|
||||
|
||||
void LogMessage::LogLine(const char* file, unsigned int line, LogId id, LogSeverity severity,
|
||||
const char* tag, const char* message) {
|
||||
void LogMessage::LogLine(const char* file, unsigned int line, LogSeverity severity, const char* tag,
|
||||
const char* message) {
|
||||
if (tag == nullptr) {
|
||||
std::lock_guard<std::recursive_mutex> lock(TagLock());
|
||||
if (gDefaultTag == nullptr) {
|
||||
gDefaultTag = new std::string(getprogname());
|
||||
}
|
||||
Logger()(id, severity, gDefaultTag->c_str(), file, line, message);
|
||||
Logger()(DEFAULT, severity, gDefaultTag->c_str(), file, line, message);
|
||||
} else {
|
||||
Logger()(id, severity, tag, file, line, message);
|
||||
Logger()(DEFAULT, severity, tag, file, line, message);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue