14#ifndef OR_TOOLS_BASE_LOGGING_H_
15#define OR_TOOLS_BASE_LOGGING_H_
27#if defined(__GNUC__) && defined(__linux__)
40#define QCHECK_EQ CHECK_EQ
41#define QCHECK_GE CHECK_GE
42#define ABSL_DIE_IF_NULL CHECK_NOTNULL
43#define CHECK_OK(x) CHECK((x).ok())
44#define QCHECK_OK CHECK_OK
50#define GLOG_MSVC_PUSH_DISABLE_WARNING(n) \
51 __pragma(warning(push)) __pragma(warning(disable : n))
52#define GLOG_MSVC_POP_WARNING() __pragma(warning(pop))
53#define ATTRIBUTE_NOINLINE
54#define ATTRIBUTE_NORETURN __declspec(noreturn)
56#define GLOG_MSVC_PUSH_DISABLE_WARNING(n)
57#define GLOG_MSVC_POP_WARNING()
58#define ATTRIBUTE_NOINLINE __attribute__((noinline))
59#define ATTRIBUTE_NORETURN __attribute__((noreturn))
71#ifndef GOOGLE_STRIP_LOG
72#define GOOGLE_STRIP_LOG 0
80#ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN
82#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0))
84#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x
88#ifndef GOOGLE_PREDICT_FALSE
90#define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0))
92#define GOOGLE_PREDICT_FALSE(x) x
96#ifndef GOOGLE_PREDICT_TRUE
98#define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
100#define GOOGLE_PREDICT_TRUE(x) x
303#if GOOGLE_STRIP_LOG == 0
304#define COMPACT_GOOGLE_LOG_INFO google::LogMessage(__FILE__, __LINE__)
305#define LOG_TO_STRING_INFO(message) \
306 google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, message)
308#define COMPACT_GOOGLE_LOG_INFO google::NullStream()
309#define LOG_TO_STRING_INFO(message) google::NullStream()
312#if GOOGLE_STRIP_LOG <= 1
313#define COMPACT_GOOGLE_LOG_WARNING \
314 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING)
315#define LOG_TO_STRING_WARNING(message) \
316 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, message)
318#define COMPACT_GOOGLE_LOG_WARNING google::NullStream()
319#define LOG_TO_STRING_WARNING(message) google::NullStream()
322#if GOOGLE_STRIP_LOG <= 2
323#define COMPACT_GOOGLE_LOG_ERROR \
324 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR)
325#define LOG_TO_STRING_ERROR(message) \
326 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, message)
328#define COMPACT_GOOGLE_LOG_ERROR google::NullStream()
329#define LOG_TO_STRING_ERROR(message) google::NullStream()
332#if GOOGLE_STRIP_LOG <= 3
333#define COMPACT_GOOGLE_LOG_FATAL google::LogMessageFatal(__FILE__, __LINE__)
334#define LOG_TO_STRING_FATAL(message) \
335 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, message)
337#define COMPACT_GOOGLE_LOG_FATAL google::NullStreamFatal()
338#define LOG_TO_STRING_FATAL(message) google::NullStreamFatal()
341#if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON)
342#define DCHECK_IS_ON() 0
344#define DCHECK_IS_ON() 1
350#define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR
351#elif GOOGLE_STRIP_LOG <= 3
352#define COMPACT_GOOGLE_LOG_DFATAL \
353 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL)
355#define COMPACT_GOOGLE_LOG_DFATAL google::NullStreamFatal()
358#define GOOGLE_LOG_INFO(counter) \
359 google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, \
360 &google::LogMessage::SendToLog)
361#define SYSLOG_INFO(counter) \
362 google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, \
363 &google::LogMessage::SendToSyslogAndLog)
364#define GOOGLE_LOG_WARNING(counter) \
365 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \
366 &google::LogMessage::SendToLog)
367#define SYSLOG_WARNING(counter) \
368 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \
369 &google::LogMessage::SendToSyslogAndLog)
370#define GOOGLE_LOG_ERROR(counter) \
371 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \
372 &google::LogMessage::SendToLog)
373#define SYSLOG_ERROR(counter) \
374 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \
375 &google::LogMessage::SendToSyslogAndLog)
376#define GOOGLE_LOG_FATAL(counter) \
377 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \
378 &google::LogMessage::SendToLog)
379#define SYSLOG_FATAL(counter) \
380 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \
381 &google::LogMessage::SendToSyslogAndLog)
382#define GOOGLE_LOG_DFATAL(counter) \
383 google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \
384 &google::LogMessage::SendToLog)
385#define SYSLOG_DFATAL(counter) \
386 google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \
387 &google::LogMessage::SendToSyslogAndLog)
389#if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || \
390 defined(__CYGWIN__) || defined(__CYGWIN32__)
392#define LOG_SYSRESULT(result) \
393 if (FAILED(HRESULT_FROM_WIN32(result))) { \
394 LPSTR message = NULL; \
395 LPSTR msg = reinterpret_cast<LPSTR>(&message); \
396 DWORD message_length = FormatMessageA( \
397 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, \
398 result, 0, msg, 100, NULL); \
399 if (message_length > 0) { \
400 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, 0, \
401 &google::LogMessage::SendToLog) \
403 << reinterpret_cast<const char*>(message); \
404 LocalFree(message); \
417#define LOG(severity) COMPACT_GOOGLE_LOG_##severity.stream()
418#define SYSLOG(severity) SYSLOG_##severity(0).stream()
442#define LOG_TO_SINK(sink, severity) \
443 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
444 static_cast<google::LogSink*>(sink), true) \
446#define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity) \
447 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
448 static_cast<google::LogSink*>(sink), false) \
461#define LOG_TO_STRING(severity, message) \
462 LOG_TO_STRING_##severity(static_cast<string*>(message)).stream()
472#define LOG_STRING(severity, outvec) \
473 LOG_TO_STRING_##severity(static_cast<std::vector<std::string>*>(outvec)) \
476#define LOG_IF(severity, condition) \
477 static_cast<void>(0), \
478 !(condition) ? (void)0 : google::LogMessageVoidify() & LOG(severity)
479#define SYSLOG_IF(severity, condition) \
480 static_cast<void>(0), \
481 !(condition) ? (void)0 : google::LogMessageVoidify() & SYSLOG(severity)
483#define LOG_ASSERT(condition) \
484 LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
485#define SYSLOG_ASSERT(condition) \
486 SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition
492#define CHECK(condition) \
493 LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \
494 << "Check failed: " #condition " "
502 operator bool()
const {
553 const signed char& v);
556 const unsigned char& v);
559template <
typename T1,
typename T2>
566 const std::nullptr_t& v);
593 std::ostream* ForVar2();
595 std::string* NewString();
598 std::ostringstream* stream_;
603template <
typename T1,
typename T2>
605 const char* exprtext) {
616#define DEFINE_CHECK_OP_IMPL(name, op) \
617 template <typename T1, typename T2> \
618 inline std::string* name##Impl(const T1& v1, const T2& v2, \
619 const char* exprtext) { \
620 if (GOOGLE_PREDICT_TRUE(v1 op v2)) \
623 return MakeCheckOpString(v1, v2, exprtext); \
625 inline std::string* name##Impl(int v1, int v2, const char* exprtext) { \
626 return name##Impl<int, int>(v1, v2, exprtext); \
639#undef DEFINE_CHECK_OP_IMPL
644#if defined(STATIC_ANALYSIS)
646#define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1)op(val2))
657typedef std::string _Check_string;
658#define CHECK_OP_LOG(name, op, val1, val2, log) \
659 while (google::_Check_string* _result = google::Check##name##Impl( \
660 google::GetReferenceableValue(val1), \
661 google::GetReferenceableValue(val2), #val1 " " #op " " #val2)) \
662 log(__FILE__, __LINE__, google::CheckOpString(_result)).stream()
666#define CHECK_OP_LOG(name, op, val1, val2, log) \
667 while (google::CheckOpString _result = google::Check##name##Impl( \
668 google::GetReferenceableValue(val1), \
669 google::GetReferenceableValue(val2), #val1 " " #op " " #val2)) \
670 log(__FILE__, __LINE__, _result).stream()
673#if GOOGLE_STRIP_LOG <= 3
674#define CHECK_OP(name, op, val1, val2) \
675 CHECK_OP_LOG(name, op, val1, val2, google::LogMessageFatal)
677#define CHECK_OP(name, op, val1, val2) \
678 CHECK_OP_LOG(name, op, val1, val2, google::NullStreamFatal)
699#define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2)
700#define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2)
701#define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2)
702#define CHECK_LT(val1, val2) CHECK_OP(_LT, <, val1, val2)
703#define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2)
704#define CHECK_GT(val1, val2) CHECK_OP(_GT, >, val1, val2)
709#define CHECK_NOTNULL(val) \
710 google::CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val))
714#define DECLARE_CHECK_STROP_IMPL(func, expected) \
715 GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \
716 const char* s1, const char* s2, const char* names);
721#undef DECLARE_CHECK_STROP_IMPL
725#define CHECK_STROP(func, op, expected, s1, s2) \
726 while (google::CheckOpString _result = google::Check##func##expected##Impl( \
727 (s1), (s2), #s1 " " #op " " #s2)) \
728 LOG(FATAL) << *_result.str_
737#define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2)
738#define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2)
739#define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2)
740#define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2)
742#define CHECK_INDEX(I, A) CHECK(I < (sizeof(A) / sizeof(A[0])))
743#define CHECK_BOUND(B, A) CHECK(B <= (sizeof(A) / sizeof(A[0])))
745#define CHECK_DOUBLE_EQ(val1, val2) \
747 CHECK_LE((val1), (val2) + 0.000000000000001L); \
748 CHECK_GE((val1), (val2)-0.000000000000001L); \
751#define CHECK_NEAR(val1, val2, margin) \
753 CHECK_LE((val1), (val2) + (margin)); \
754 CHECK_GE((val1), (val2) - (margin)); \
763#define PLOG(severity) GOOGLE_PLOG(severity, 0).stream()
765#define GOOGLE_PLOG(severity, counter) \
766 google::ErrnoLogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
767 counter, &google::LogMessage::SendToLog)
769#define PLOG_IF(severity, condition) \
770 static_cast<void>(0), \
771 !(condition) ? (void)0 : google::LogMessageVoidify() & PLOG(severity)
776#define PCHECK(condition) \
777 PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \
778 << "Check failed: " #condition " "
788#define CHECK_ERR(invocation) \
789 PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \
794#define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line)
795#define LOG_EVERY_N_VARNAME_CONCAT(base, line) base##line
797#define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__)
798#define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__)
800#define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \
801 static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
803 if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
804 if (LOG_OCCURRENCES_MOD_N == 1) \
805 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
806 LOG_OCCURRENCES, &what_to_do) \
809#define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \
810 static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
813 ((LOG_OCCURRENCES_MOD_N = (LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \
814 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
815 LOG_OCCURRENCES, &what_to_do) \
818#define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \
819 static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \
821 if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \
822 if (LOG_OCCURRENCES_MOD_N == 1) \
823 google::ErrnoLogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
824 LOG_OCCURRENCES, &what_to_do) \
827#define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \
828 static int LOG_OCCURRENCES = 0; \
829 if (LOG_OCCURRENCES <= n) ++LOG_OCCURRENCES; \
830 if (LOG_OCCURRENCES <= n) \
831 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \
832 LOG_OCCURRENCES, &what_to_do) \
835namespace logging_internal {
841#define LOG_EVERY_N(severity, n) \
842 SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)
844#define SYSLOG_EVERY_N(severity, n) \
845 SOME_KIND_OF_LOG_EVERY_N(severity, (n), \
846 google::LogMessage::SendToSyslogAndLog)
848#define PLOG_EVERY_N(severity, n) \
849 SOME_KIND_OF_PLOG_EVERY_N(severity, (n), google::LogMessage::SendToLog)
851#define LOG_FIRST_N(severity, n) \
852 SOME_KIND_OF_LOG_FIRST_N(severity, (n), google::LogMessage::SendToLog)
854#define LOG_IF_EVERY_N(severity, condition, n) \
855 SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), \
856 google::LogMessage::SendToLog)
866#define COMPACT_GOOGLE_LOG_0 COMPACT_GOOGLE_LOG_ERROR
867#define SYSLOG_0 SYSLOG_ERROR
868#define LOG_TO_STRING_0 LOG_TO_STRING_ERROR
877#define DLOG(severity) LOG(severity)
878#define DVLOG(verboselevel) VLOG(verboselevel)
879#define DLOG_IF(severity, condition) LOG_IF(severity, condition)
880#define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n)
881#define DLOG_IF_EVERY_N(severity, condition, n) \
882 LOG_IF_EVERY_N(severity, condition, n)
883#define DLOG_ASSERT(condition) LOG_ASSERT(condition)
886#define DCHECK(condition) CHECK(condition)
887#define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2)
888#define DCHECK_NE(val1, val2) CHECK_NE(val1, val2)
889#define DCHECK_LE(val1, val2) CHECK_LE(val1, val2)
890#define DCHECK_LT(val1, val2) CHECK_LT(val1, val2)
891#define DCHECK_GE(val1, val2) CHECK_GE(val1, val2)
892#define DCHECK_GT(val1, val2) CHECK_GT(val1, val2)
893#define DCHECK_NOTNULL(val) CHECK_NOTNULL(val)
894#define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2)
895#define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2)
896#define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2)
897#define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2)
901#define DLOG(severity) \
902 static_cast<void>(0), \
903 true ? (void)0 : google::LogMessageVoidify() & LOG(severity)
905#define DVLOG(verboselevel) \
906 static_cast<void>(0), (true || !VLOG_IS_ON(verboselevel)) \
908 : google::LogMessageVoidify() & LOG(INFO)
910#define DLOG_IF(severity, condition) \
911 static_cast<void>(0), (true || !(condition)) \
913 : google::LogMessageVoidify() & LOG(severity)
915#define DLOG_EVERY_N(severity, n) \
916 static_cast<void>(0), \
917 true ? (void)0 : google::LogMessageVoidify() & LOG(severity)
919#define DLOG_IF_EVERY_N(severity, condition, n) \
920 static_cast<void>(0), (true || !(condition)) \
922 : google::LogMessageVoidify() & LOG(severity)
924#define DLOG_ASSERT(condition) \
925 static_cast<void>(0), true ? (void)0 : LOG_ASSERT(condition)
928#define DCHECK(condition) \
929 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
930 while (false) GLOG_MSVC_POP_WARNING() CHECK(condition)
932#define DCHECK_EQ(val1, val2) \
933 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
934 while (false) GLOG_MSVC_POP_WARNING() CHECK_EQ(val1, val2)
936#define DCHECK_NE(val1, val2) \
937 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
938 while (false) GLOG_MSVC_POP_WARNING() CHECK_NE(val1, val2)
940#define DCHECK_LE(val1, val2) \
941 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
942 while (false) GLOG_MSVC_POP_WARNING() CHECK_LE(val1, val2)
944#define DCHECK_LT(val1, val2) \
945 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
946 while (false) GLOG_MSVC_POP_WARNING() CHECK_LT(val1, val2)
948#define DCHECK_GE(val1, val2) \
949 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
950 while (false) GLOG_MSVC_POP_WARNING() CHECK_GE(val1, val2)
952#define DCHECK_GT(val1, val2) \
953 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
954 while (false) GLOG_MSVC_POP_WARNING() CHECK_GT(val1, val2)
958#define DCHECK_NOTNULL(val) (val)
960#define DCHECK_STREQ(str1, str2) \
961 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
962 while (false) GLOG_MSVC_POP_WARNING() CHECK_STREQ(str1, str2)
964#define DCHECK_STRCASEEQ(str1, str2) \
965 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
966 while (false) GLOG_MSVC_POP_WARNING() CHECK_STRCASEEQ(str1, str2)
968#define DCHECK_STRNE(str1, str2) \
969 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
970 while (false) GLOG_MSVC_POP_WARNING() CHECK_STRNE(str1, str2)
972#define DCHECK_STRCASENE(str1, str2) \
973 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \
974 while (false) GLOG_MSVC_POP_WARNING() CHECK_STRCASENE(str1, str2)
980#define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel))
982#define VLOG_EVERY_N(verboselevel, n) \
983 LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n)
985namespace base_logging {
996 virtual int_type
overflow(int_type ch) {
return ch; }
999 size_t pcount()
const {
return pptr() - pbase(); }
1000 char*
pbase()
const {
return std::streambuf::pbase(); }
1036 :
std::ostream(NULL), streambuf_(buf, len), ctr_(ctr), self_(this) {
1040 int ctr()
const {
return ctr_; }
1045 size_t pcount()
const {
return streambuf_.pcount(); }
1046 char*
pbase()
const {
return streambuf_.pbase(); }
1047 char*
str()
const {
return pbase(); }
1062 SendMethod send_method);
1085 bool also_send_to_log);
1091 std::vector<std::string>* outvec);
1116 void SendToSyslogAndLog();
1121 std::ostream& stream();
1123 int preserved_errno()
const;
1126 static int64_t num_messages(
int severity);
1132 void SendToSinkAndLog();
1136 void WriteToStringAndLog();
1138 void SaveOrSendToLog();
1172inline void LogAtLevel(
int const severity, std::string
const& msg) {
1180#define LOG_AT_LEVEL(severity) \
1181 google::LogMessage(__FILE__, __LINE__, severity).stream()
1192#if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \
1193 (defined(_MSC_VER) && _MSC_VER >= 1900))
1202template <
typename T>
1205 LogMessageFatal(
file, line,
new std::string(names));
1207 return std::forward<T>(t);
1213template <
typename T>
1269 const char* base_filename);
1278 const char* symlink_basename);
1293 const char* base_filename,
int line,
1294 const struct ::tm* tm_time,
const char*
message,
1295 size_t message_len) = 0;
1310 virtual void WaitTillSent();
1315 const struct ::tm* tm_time,
const char*
message,
1316 size_t message_len);
1330 const char* filename_extension);
1355 std::vector<std::string>* list);
1391 virtual void Write(
bool force_flush, time_t timestamp,
const char*
message,
1392 int message_len) = 0;
1442 :
LogMessage::LogStream(message_buffer_, 1, 0) {}
1449 char message_buffer_[2];
#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x)
std::ostream & operator<<(std::ostream &out, const google::DummyClassToDefineOperator &)
#define ATTRIBUTE_NOINLINE
#define GLOG_MSVC_PUSH_DISABLE_WARNING(n)
ABSL_DECLARE_FLAG(bool, logtostderr)
#define DECLARE_CHECK_STROP_IMPL(func, expected)
void FixFlagsAndEnvironmentForSwig()
#define GLOG_MSVC_POP_WARNING()
#define ATTRIBUTE_NORETURN
LogStream(char *buf, int len, int ctr)
static const size_t kMaxLogMessageLen
void operator&(std::ostream &)
virtual void send(LogSeverity severity, const char *full_filename, const char *base_filename, int line, const struct ::tm *tm_time, const char *message, size_t message_len)=0
ATTRIBUTE_NORETURN ~NullStreamFatal()
NullStreamFatal(const char *file, int line, const CheckOpString &result)
NullStream(const char *, int, const CheckOpString &)
std::string * NewString()
virtual uint32_t LogSize()=0
virtual void Write(bool force_flush, time_t timestamp, const char *message, int message_len)=0
virtual int_type overflow(int_type ch)
LogStreamBuf(char *buf, int len)
#define GOOGLE_GLOG_DLL_DECL
LogSeverity NormalizeSeverity(LogSeverity s)
GOOGLE_GLOG_DLL_DECL Logger * GetLogger(LogSeverity level)
GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger *logger)
ostream & operator<<(ostream &os, const PRIVATE_Counter &)
void InitGoogleLogging(const char *argv0)
void FlushLogFilesUnsafe(LogSeverity min_severity)
const T & GetReferenceableValue(const T &t)
T * CheckNotNull(const char *file, int line, const char *names, T *t)
void SetLogFilenameExtension(const char *ext)
void SetLogDestination(LogSeverity severity, const char *base_filename)
void SetStderrLogging(LogSeverity min_severity)
void LogAtLevel(int const severity, std::string const &msg)
const char * GetLogSeverityName(LogSeverity severity)
void GetExistingTempDirectories(vector< string > *list)
void MakeCheckOpValueString(std::ostream *os, const char &v)
void ShutdownGoogleLogging()
void InstallFailureFunction(void(*fail_func)())
int posix_strerror_r(int err, char *buf, size_t len)
const vector< string > & GetLoggingDirectories()
void SetLogSymlink(LogSeverity severity, const char *symlink_basename)
void AddLogSink(LogSink *destination)
void FlushLogFiles(LogSeverity min_severity)
void TestOnly_ClearLoggingDirectoriesList()
std::string * MakeCheckOpString(const T1 &v1, const T2 &v2, const char *exprtext) ATTRIBUTE_NOINLINE
DEFINE_CHECK_OP_IMPL(Check_EQ,==) DEFINE_CHECK_OP_IMPL(Check_NE
void RemoveLogSink(LogSink *destination)
void ReprintFatalMessage()
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
CheckOpString(std::string *str)