Adding RTC_ prefixed LOG macros.

In order to avoid conflicts with downstream projects WebRTC is going
to prefix its LOG macros with RTC_.

This CL renames all the LOG macros to macros with the RTC_ prefix and
it also defines backward compatibility LOG macros in order to let
downstream projects to switch to RTC_ prefixed macros without breaking
them.

A follow-up CL will remove the usage of LOG macros in WebRTC.

Bug: webrtc:8452
Change-Id: Ic3e495cba6c772f65259dc65ee278560a59d02d7
Reviewed-on: https://webrtc-review.googlesource.com/15442
Commit-Queue: Mirko Bonadei <mbonadei@webrtc.org>
Reviewed-by: Karl Wiberg <kwiberg@webrtc.org>
Reviewed-by: Niels Moller <nisse@webrtc.org>
Reviewed-by: Patrik Höglund <phoglund@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#20456}
This commit is contained in:
Mirko Bonadei
2017-10-27 09:43:53 +02:00
committed by Commit Bot
parent b2d355ed1f
commit 8ed8e56149
3 changed files with 94 additions and 67 deletions

View File

@ -22,7 +22,7 @@
#endif
#if defined(WEBRTC_ANDROID)
#define RTC_LOG_TAG "rtc"
#define RTC_LOG_TAG_ANDROID "rtc"
#include <android/log.h> // NOLINT
#endif
@ -43,7 +43,7 @@ namespace rtc {
void VPrintError(const char* format, va_list args) {
#if defined(WEBRTC_ANDROID)
__android_log_vprint(ANDROID_LOG_ERROR, RTC_LOG_TAG, format, args);
__android_log_vprint(ANDROID_LOG_ERROR, RTC_LOG_TAG_ANDROID, format, args);
#else
vfprintf(stderr, format, args);
#endif

View File

@ -221,6 +221,7 @@ class FatalMessageVoidify {
#define RTC_UNREACHABLE_CODE_HIT false
#define RTC_NOTREACHED() RTC_DCHECK(RTC_UNREACHABLE_CODE_HIT)
// TODO(bugs.webrtc.org/8454): Add an RTC_ prefix or rename differently.
#define FATAL() rtc::FatalMessage(__FILE__, __LINE__).stream()
// TODO(ajm): Consider adding RTC_NOTIMPLEMENTED macro when
// base/logging.h and system_wrappers/logging.h are consolidated such that we

View File

@ -8,40 +8,40 @@
* be found in the AUTHORS file in the root of the source tree.
*/
// LOG(...) an ostream target that can be used to send formatted
// RTC_LOG(...) an ostream target that can be used to send formatted
// output to a variety of logging targets, such as debugger console, stderr,
// or any LogSink.
// The severity level passed as the first argument to the LOGging
// The severity level passed as the first argument to the logging
// functions is used as a filter, to limit the verbosity of the logging.
// Static members of LogMessage documented below are used to control the
// Static members of LogMessage documented below are used to control the
// verbosity and target of the output.
// There are several variations on the LOG macro which facilitate logging
// There are several variations on the RTC_LOG macro which facilitate logging
// of common error conditions, detailed below.
// LOG(sev) logs the given stream at severity "sev", which must be a
// RTC_LOG(sev) logs the given stream at severity "sev", which must be a
// compile-time constant of the LoggingSeverity type, without the namespace
// prefix.
// LOG_V(sev) Like LOG(), but sev is a run-time variable of the LoggingSeverity
// type (basically, it just doesn't prepend the namespace).
// LOG_F(sev) Like LOG(), but includes the name of the current function.
// LOG_T(sev) Like LOG(), but includes the this pointer.
// LOG_T_F(sev) Like LOG_F(), but includes the this pointer.
// LOG_GLE(M)(sev [, mod]) attempt to add a string description of the
// RTC_LOG_V(sev) Like RTC_LOG(), but sev is a run-time variable of the
// LoggingSeverity type (basically, it just doesn't prepend the namespace).
// RTC_LOG_F(sev) Like RTC_LOG(), but includes the name of the current function.
// RTC_LOG_T(sev) Like RTC_LOG(), but includes the this pointer.
// RTC_LOG_T_F(sev) Like RTC_LOG_F(), but includes the this pointer.
// RTC_LOG_GLE(M)(sev [, mod]) attempt to add a string description of the
// HRESULT returned by GetLastError. The "M" variant allows searching of a
// DLL's string table for the error description.
// LOG_ERRNO(sev) attempts to add a string description of an errno-derived
// RTC_LOG_ERRNO(sev) attempts to add a string description of an errno-derived
// error. errno and associated facilities exist on both Windows and POSIX,
// but on Windows they only apply to the C/C++ runtime.
// LOG_ERR(sev) is an alias for the platform's normal error system, i.e. _GLE on
// Windows and _ERRNO on POSIX.
// RTC_LOG_ERR(sev) is an alias for the platform's normal error system, i.e.
// _GLE on Windows and _ERRNO on POSIX.
// (The above three also all have _EX versions that let you specify the error
// code, rather than using the last one.)
// LOG_E(sev, ctx, err, ...) logs a detailed error interpreted using the
// RTC_LOG_E(sev, ctx, err, ...) logs a detailed error interpreted using the
// specified context.
// LOG_CHECK_LEVEL(sev) (and LOG_CHECK_LEVEL_V(sev)) can be used as a test
// before performing expensive or sensitive operations whose sole purpose is
// to output logging data at the desired level.
// Lastly, PLOG(sev, err) is an alias for LOG_ERR_EX.
// RTC_LOG_CHECK_LEVEL(sev) (and RTC_LOG_CHECK_LEVEL_V(sev)) can be used as a
// test before performing expensive or sensitive operations whose sole
// purpose is to output logging data at the desired level.
// Lastly, RTC_PLOG(sev, err) is an alias for RTC_LOG_ERR_EX.
#ifndef RTC_BASE_LOGGING_H_
#define RTC_BASE_LOGGING_H_
@ -262,8 +262,6 @@ void LogMultiline(LoggingSeverity level, const char* label, bool input,
const void* data, size_t len, bool hex_mode,
LogMultilineState* state);
#ifndef LOG
// The following non-obvious technique for implementation of a
// conditional log stream was stolen from google3/base/logging.h.
@ -279,90 +277,118 @@ class LogMessageVoidify {
void operator&(std::ostream&) { }
};
#define LOG_SEVERITY_PRECONDITION(sev) \
#define RTC_LOG_SEVERITY_PRECONDITION(sev) \
!(rtc::LogMessage::Loggable(sev)) \
? (void) 0 \
: rtc::LogMessageVoidify() &
#define LOG(sev) \
LOG_SEVERITY_PRECONDITION(rtc::sev) \
#define RTC_LOG(sev) \
RTC_LOG_SEVERITY_PRECONDITION(rtc::sev) \
rtc::LogMessage(__FILE__, __LINE__, rtc::sev).stream()
// The _V version is for when a variable is passed in. It doesn't do the
// namespace concatination.
#define LOG_V(sev) \
LOG_SEVERITY_PRECONDITION(sev) \
#define RTC_LOG_V(sev) \
RTC_LOG_SEVERITY_PRECONDITION(sev) \
rtc::LogMessage(__FILE__, __LINE__, sev).stream()
// The _F version prefixes the message with the current function name.
#if (defined(__GNUC__) && !defined(NDEBUG)) || defined(WANT_PRETTY_LOG_F)
#define LOG_F(sev) LOG(sev) << __PRETTY_FUNCTION__ << ": "
#define LOG_T_F(sev) LOG(sev) << this << ": " << __PRETTY_FUNCTION__ << ": "
#define RTC_LOG_F(sev) RTC_LOG(sev) << __PRETTY_FUNCTION__ << ": "
#define RTC_LOG_T_F(sev) RTC_LOG(sev) << this << ": " \
<< __PRETTY_FUNCTION__ << ": "
#else
#define LOG_F(sev) LOG(sev) << __FUNCTION__ << ": "
#define LOG_T_F(sev) LOG(sev) << this << ": " << __FUNCTION__ << ": "
#define RTC_LOG_F(sev) RTC_LOG(sev) << __FUNCTION__ << ": "
#define RTC_LOG_T_F(sev) RTC_LOG(sev) << this << ": " << __FUNCTION__ << ": "
#endif
#define LOG_CHECK_LEVEL(sev) \
#define RTC_LOG_CHECK_LEVEL(sev) \
rtc::LogCheckLevel(rtc::sev)
#define LOG_CHECK_LEVEL_V(sev) \
#define RTC_LOG_CHECK_LEVEL_V(sev) \
rtc::LogCheckLevel(sev)
inline bool LogCheckLevel(LoggingSeverity sev) {
return (LogMessage::GetMinLogSeverity() <= sev);
}
#define LOG_E(sev, ctx, err, ...) \
LOG_SEVERITY_PRECONDITION(rtc::sev) \
#define RTC_LOG_E(sev, ctx, err, ...) \
RTC_LOG_SEVERITY_PRECONDITION(rtc::sev) \
rtc::LogMessage(__FILE__, __LINE__, rtc::sev, \
rtc::ERRCTX_ ## ctx, err , ##__VA_ARGS__) \
rtc::ERRCTX_ ## ctx, err , ##__VA_ARGS__) \
.stream()
#define LOG_T(sev) LOG(sev) << this << ": "
#define RTC_LOG_T(sev) RTC_LOG(sev) << this << ": "
#define LOG_ERRNO_EX(sev, err) \
LOG_E(sev, ERRNO, err)
#define LOG_ERRNO(sev) \
LOG_ERRNO_EX(sev, errno)
#define RTC_LOG_ERRNO_EX(sev, err) \
RTC_LOG_E(sev, ERRNO, err)
#define RTC_LOG_ERRNO(sev) \
RTC_LOG_ERRNO_EX(sev, errno)
#if defined(WEBRTC_WIN)
#define LOG_GLE_EX(sev, err) \
LOG_E(sev, HRESULT, err)
#define LOG_GLE(sev) \
LOG_GLE_EX(sev, GetLastError())
#define LOG_GLEM(sev, mod) \
LOG_E(sev, HRESULT, GetLastError(), mod)
#define LOG_ERR_EX(sev, err) \
LOG_GLE_EX(sev, err)
#define LOG_ERR(sev) \
LOG_GLE(sev)
#define LAST_SYSTEM_ERROR \
#define RTC_LOG_GLE_EX(sev, err) \
RTC_LOG_E(sev, HRESULT, err)
#define RTC_LOG_GLE(sev) \
RTC_LOG_GLE_EX(sev, GetLastError())
#define RTC_LOG_GLEM(sev, mod) \
RTC_LOG_E(sev, HRESULT, GetLastError(), mod)
#define RTC_LOG_ERR_EX(sev, err) \
RTC_LOG_GLE_EX(sev, err)
#define RTC_LOG_ERR(sev) \
RTC_LOG_GLE(sev)
#define RTC_LAST_SYSTEM_ERROR \
(::GetLastError())
#elif defined(__native_client__) && __native_client__
#define LOG_ERR_EX(sev, err) \
LOG(sev)
#define LOG_ERR(sev) \
LOG(sev)
#define LAST_SYSTEM_ERROR \
#define RTC_LOG_ERR_EX(sev, err) \
RTC_LOG(sev)
#define RTC_LOG_ERR(sev) \
RTC_LOG(sev)
#define RTC_LAST_SYSTEM_ERROR \
(0)
#elif defined(WEBRTC_POSIX)
#define LOG_ERR_EX(sev, err) \
LOG_ERRNO_EX(sev, err)
#define LOG_ERR(sev) \
LOG_ERRNO(sev)
#define LAST_SYSTEM_ERROR \
#define RTC_LOG_ERR_EX(sev, err) \
RTC_LOG_ERRNO_EX(sev, err)
#define RTC_LOG_ERR(sev) \
RTC_LOG_ERRNO(sev)
#define RTC_LAST_SYSTEM_ERROR \
(errno)
#endif // WEBRTC_WIN
#define LOG_TAG(sev, tag) \
LOG_SEVERITY_PRECONDITION(sev) \
#define RTC_LOG_TAG(sev, tag) \
RTC_LOG_SEVERITY_PRECONDITION(sev) \
rtc::LogMessage(nullptr, 0, sev, tag).stream()
#define PLOG(sev, err) \
LOG_ERR_EX(sev, err)
#define RTC_PLOG(sev, err) \
RTC_LOG_ERR_EX(sev, err)
// TODO(?): Add an "assert" wrapper that logs in the same manner.
// TODO(bugs.webrtc.org/8452): Remove these backwards compatibility wrappers.
#ifndef LOG
#define LOG(sev) RTC_LOG(sev)
#define LOG_V(sev) RTC_LOG_V(sev)
#define LOG_F(sev) RTC_LOG_F(sev)
#define LOG_T_F(sev) RTC_LOG_T_F(sev)
#define LOG_CHECK_LEVEL(sev) RTC_LOG_CHECK_LEVEL(sev)
#define LOG_CHECK_LEVEL_V(sev) RTC_LOG_CHECK_LEVEL_V(sev)
#define LOG_E(sev, ctx, err, ...) RTC_LOG_E(sev, ctx, err, ##__VA_ARGS__)
#define LOG_T(sev) RTC_LOG_T(sev)
#define LOG_ERRNO_EX(sev, err) RTC_LOG_ERRNO_EX(sev, err)
#define LOG_ERRNO(sev) RTC_LOG_ERRNO(sev)
#define LAST_SYSTEM_ERROR RTC_LAST_SYSTEM_ERROR
#define LOG_ERR_EX(sev, err) RTC_LOG_ERR_EX(sev, err)
#define LOG_ERR(sev) RTC_LOG_ERR(sev)
#if defined(WEBRTC_WIN)
#define LOG_GLE_EX(sev, err) RTC_LOG_GLE_EX(sev, err)
#define LOG_GLE(sev) RTC_LOG_GLE(sev)
#define LOG_GLEM(sev, mod) RTC_LOG_GLEM(sev, mod)
#endif // WEBRTC_WIN
#define LOG_TAG(sev, tag) RTC_LOG_TAG(sev, tag)
#define PLOG(sev, err) RTC_PLOG(sev, err)
#endif // LOG
} // namespace rtc