Add DVLOG macro to discard logs on user builds

PiperOrigin-RevId: 273740308
This commit is contained in:
Gaurav Jain 2019-10-09 07:16:28 -07:00 committed by TensorFlower Gardener
parent 8ef501423b
commit cca6113667
2 changed files with 20 additions and 2 deletions

View File

@ -42,7 +42,7 @@ namespace internal {
class LogMessage : public std::basic_ostringstream<char> {
public:
LogMessage(const char* fname, int line, int severity);
~LogMessage();
~LogMessage() override;
// Returns the minimum log level for VLOG statements.
// E.g., if MinVLogLevel() is 2, then VLOG(2) statements will produce output,
@ -81,7 +81,14 @@ struct Voidifier {
class LogMessageFatal : public LogMessage {
public:
LogMessageFatal(const char* file, int line) TF_ATTRIBUTE_COLD;
TF_ATTRIBUTE_NORETURN ~LogMessageFatal();
TF_ATTRIBUTE_NORETURN ~LogMessageFatal() override;
};
// LogMessageNull supports the DVLOG macro by simply dropping any log messages.
class LogMessageNull : public std::basic_ostringstream<char> {
public:
LogMessageNull() {}
~LogMessageNull() override {}
};
#define _TF_LOG_INFO \
@ -123,6 +130,15 @@ class LogMessageFatal : public LogMessage {
::tensorflow::internal::LogMessage(__FILE__, __LINE__, \
tensorflow::INFO)
// `DVLOG` behaves like `VLOG` in debug mode (i.e. `#ifndef NDEBUG`).
// Otherwise, it compiles away and does nothing.
#ifndef NDEBUG
#define DVLOG VLOG
#else
#define DVLOG(verbose_level) \
while (false && (verbose_level) > 0) ::tensorflow::internal::LogMessageNull()
#endif
// CHECK dies with a fatal error if condition is not true. It is *not*
// controlled by NDEBUG, so the check will be executed regardless of
// compilation mode. Therefore, it is safe to do things like:

View File

@ -24,6 +24,8 @@ TEST(Logging, Log) {
LOG(ERROR) << "Error message";
VLOG(1) << "A VLOG message";
VLOG(2) << "A higher VLOG message";
DVLOG(1) << "A DVLOG message";
DVLOG(2) << "A higher DVLOG message";
}
TEST(Logging, CheckChecks) {