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 QCHECK_GT CHECK_GT 43 #define ABSL_DIE_IF_NULL CHECK_NOTNULL 44 #define CHECK_OK(x) CHECK((x).ok()) 45 #define QCHECK_OK CHECK_OK 51 #define GLOG_MSVC_PUSH_DISABLE_WARNING(n) \ 52 __pragma(warning(push)) __pragma(warning(disable : n)) 53 #define GLOG_MSVC_POP_WARNING() __pragma(warning(pop)) 54 #define ATTRIBUTE_NOINLINE 55 #define ATTRIBUTE_NORETURN __declspec(noreturn) 57 #define GLOG_MSVC_PUSH_DISABLE_WARNING(n) 58 #define GLOG_MSVC_POP_WARNING() 59 #define ATTRIBUTE_NOINLINE __attribute__((noinline)) 60 #define ATTRIBUTE_NORETURN __attribute__((noreturn)) 72 #ifndef GOOGLE_STRIP_LOG 73 #define GOOGLE_STRIP_LOG 0 81 #ifndef GOOGLE_PREDICT_BRANCH_NOT_TAKEN 82 #if !defined(_MSC_VER) 83 #define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) (__builtin_expect(x, 0)) 85 #define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x) x 89 #ifndef GOOGLE_PREDICT_FALSE 90 #if !defined(_MSC_VER) 91 #define GOOGLE_PREDICT_FALSE(x) (__builtin_expect(x, 0)) 93 #define GOOGLE_PREDICT_FALSE(x) x 97 #ifndef GOOGLE_PREDICT_TRUE 98 #if !defined(_MSC_VER) 99 #define GOOGLE_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1)) 101 #define GOOGLE_PREDICT_TRUE(x) x 304 #if GOOGLE_STRIP_LOG == 0 305 #define COMPACT_GOOGLE_LOG_INFO google::LogMessage(__FILE__, __LINE__) 306 #define LOG_TO_STRING_INFO(message) \ 307 google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, message) 309 #define COMPACT_GOOGLE_LOG_INFO google::NullStream() 310 #define LOG_TO_STRING_INFO(message) google::NullStream() 313 #if GOOGLE_STRIP_LOG <= 1 314 #define COMPACT_GOOGLE_LOG_WARNING \ 315 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING) 316 #define LOG_TO_STRING_WARNING(message) \ 317 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, message) 319 #define COMPACT_GOOGLE_LOG_WARNING google::NullStream() 320 #define LOG_TO_STRING_WARNING(message) google::NullStream() 323 #if GOOGLE_STRIP_LOG <= 2 324 #define COMPACT_GOOGLE_LOG_ERROR \ 325 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR) 326 #define LOG_TO_STRING_ERROR(message) \ 327 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, message) 329 #define COMPACT_GOOGLE_LOG_ERROR google::NullStream() 330 #define LOG_TO_STRING_ERROR(message) google::NullStream() 333 #if GOOGLE_STRIP_LOG <= 3 334 #define COMPACT_GOOGLE_LOG_FATAL google::LogMessageFatal(__FILE__, __LINE__) 335 #define LOG_TO_STRING_FATAL(message) \ 336 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, message) 338 #define COMPACT_GOOGLE_LOG_FATAL google::NullStreamFatal() 339 #define LOG_TO_STRING_FATAL(message) google::NullStreamFatal() 342 #define COMPACT_GOOGLE_LOG_QFATAL COMPACT_GOOGLE_LOG_FATAL 344 #if defined(NDEBUG) && !defined(DCHECK_ALWAYS_ON) 345 #define DCHECK_IS_ON() 0 347 #define DCHECK_IS_ON() 1 353 #define COMPACT_GOOGLE_LOG_DFATAL COMPACT_GOOGLE_LOG_ERROR 354 #elif GOOGLE_STRIP_LOG <= 3 355 #define COMPACT_GOOGLE_LOG_DFATAL \ 356 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL) 358 #define COMPACT_GOOGLE_LOG_DFATAL google::NullStreamFatal() 361 #define GOOGLE_LOG_INFO(counter) \ 362 google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, \ 363 &google::LogMessage::SendToLog) 364 #define SYSLOG_INFO(counter) \ 365 google::LogMessage(__FILE__, __LINE__, google::GLOG_INFO, counter, \ 366 &google::LogMessage::SendToSyslogAndLog) 367 #define GOOGLE_LOG_WARNING(counter) \ 368 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \ 369 &google::LogMessage::SendToLog) 370 #define SYSLOG_WARNING(counter) \ 371 google::LogMessage(__FILE__, __LINE__, google::GLOG_WARNING, counter, \ 372 &google::LogMessage::SendToSyslogAndLog) 373 #define GOOGLE_LOG_ERROR(counter) \ 374 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \ 375 &google::LogMessage::SendToLog) 376 #define SYSLOG_ERROR(counter) \ 377 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, counter, \ 378 &google::LogMessage::SendToSyslogAndLog) 379 #define GOOGLE_LOG_FATAL(counter) \ 380 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \ 381 &google::LogMessage::SendToLog) 382 #define SYSLOG_FATAL(counter) \ 383 google::LogMessage(__FILE__, __LINE__, google::GLOG_FATAL, counter, \ 384 &google::LogMessage::SendToSyslogAndLog) 385 #define GOOGLE_LOG_DFATAL(counter) \ 386 google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \ 387 &google::LogMessage::SendToLog) 388 #define SYSLOG_DFATAL(counter) \ 389 google::LogMessage(__FILE__, __LINE__, google::DFATAL_LEVEL, counter, \ 390 &google::LogMessage::SendToSyslogAndLog) 392 #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) || \ 393 defined(__CYGWIN__) || defined(__CYGWIN32__) 395 #define LOG_SYSRESULT(result) \ 396 if (FAILED(HRESULT_FROM_WIN32(result))) { \ 397 LPSTR message = NULL; \ 398 LPSTR msg = reinterpret_cast<LPSTR>(&message); \ 399 DWORD message_length = FormatMessageA( \ 400 FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, 0, \ 401 result, 0, msg, 100, NULL); \ 402 if (message_length > 0) { \ 403 google::LogMessage(__FILE__, __LINE__, google::GLOG_ERROR, 0, \ 404 &google::LogMessage::SendToLog) \ 406 << reinterpret_cast<const char*>(message); \ 407 LocalFree(message); \ 420 #define LOG(severity) COMPACT_GOOGLE_LOG_##severity.stream() 421 #define SYSLOG(severity) SYSLOG_##severity(0).stream() 445 #define LOG_TO_SINK(sink, severity) \ 446 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 447 static_cast<google::LogSink*>(sink), true) \ 449 #define LOG_TO_SINK_BUT_NOT_TO_LOGFILE(sink, severity) \ 450 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 451 static_cast<google::LogSink*>(sink), false) \ 464 #define LOG_TO_STRING(severity, message) \ 465 LOG_TO_STRING_##severity(static_cast<string*>(message)).stream() 475 #define LOG_STRING(severity, outvec) \ 476 LOG_TO_STRING_##severity(static_cast<std::vector<std::string>*>(outvec)) \ 479 #define LOG_IF(severity, condition) \ 480 static_cast<void>(0), \ 481 !(condition) ? (void)0 : google::LogMessageVoidify() & LOG(severity) 482 #define SYSLOG_IF(severity, condition) \ 483 static_cast<void>(0), \ 484 !(condition) ? (void)0 : google::LogMessageVoidify() & SYSLOG(severity) 486 #define LOG_ASSERT(condition) \ 487 LOG_IF(FATAL, !(condition)) << "Assert failed: " #condition 488 #define SYSLOG_ASSERT(condition) \ 489 SYSLOG_IF(FATAL, !(condition)) << "Assert failed: " #condition 495 #define CHECK(condition) \ 496 LOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \ 497 << "Check failed: " #condition " " 505 operator bool()
const {
544 template <
typename T>
556 const signed char& v);
559 const unsigned char& v);
562 template <
typename T1,
typename T2>
569 const std::nullptr_t& v);
596 std::ostream* ForVar2();
598 std::string* NewString();
601 std::ostringstream* stream_;
606 template <
typename T1,
typename T2>
608 const char* exprtext) {
619 #define DEFINE_CHECK_OP_IMPL(name, op) \ 620 template <typename T1, typename T2> \ 621 inline std::string* name##Impl(const T1& v1, const T2& v2, \ 622 const char* exprtext) { \ 623 if (GOOGLE_PREDICT_TRUE(v1 op v2)) \ 626 return MakeCheckOpString(v1, v2, exprtext); \ 628 inline std::string* name##Impl(int v1, int v2, const char* exprtext) { \ 629 return name##Impl<int, int>(v1, v2, exprtext); \ 642 #undef DEFINE_CHECK_OP_IMPL 647 #if defined(STATIC_ANALYSIS) 649 #define CHECK_OP_LOG(name, op, val1, val2, log) CHECK((val1)op(val2)) 660 typedef std::string _Check_string;
661 #define CHECK_OP_LOG(name, op, val1, val2, log) \ 662 while (google::_Check_string* _result = google::Check##name##Impl( \ 663 google::GetReferenceableValue(val1), \ 664 google::GetReferenceableValue(val2), #val1 " " #op " " #val2)) \ 665 log(__FILE__, __LINE__, google::CheckOpString(_result)).stream() 669 #define CHECK_OP_LOG(name, op, val1, val2, log) \ 670 while (google::CheckOpString _result = google::Check##name##Impl( \ 671 google::GetReferenceableValue(val1), \ 672 google::GetReferenceableValue(val2), #val1 " " #op " " #val2)) \ 673 log(__FILE__, __LINE__, _result).stream() 674 #endif // STATIC_ANALYSIS, DCHECK_IS_ON() 676 #if GOOGLE_STRIP_LOG <= 3 677 #define CHECK_OP(name, op, val1, val2) \ 678 CHECK_OP_LOG(name, op, val1, val2, google::LogMessageFatal) 680 #define CHECK_OP(name, op, val1, val2) \ 681 CHECK_OP_LOG(name, op, val1, val2, google::NullStreamFatal) 682 #endif // STRIP_LOG <= 3 702 #define CHECK_EQ(val1, val2) CHECK_OP(_EQ, ==, val1, val2) 703 #define CHECK_NE(val1, val2) CHECK_OP(_NE, !=, val1, val2) 704 #define CHECK_LE(val1, val2) CHECK_OP(_LE, <=, val1, val2) 705 #define CHECK_LT(val1, val2) CHECK_OP(_LT, <, val1, val2) 706 #define CHECK_GE(val1, val2) CHECK_OP(_GE, >=, val1, val2) 707 #define CHECK_GT(val1, val2) CHECK_OP(_GT, >, val1, val2) 712 #define CHECK_NOTNULL(val) \ 713 google::CheckNotNull(__FILE__, __LINE__, "'" #val "' Must be non NULL", (val)) 717 #define DECLARE_CHECK_STROP_IMPL(func, expected) \ 718 GOOGLE_GLOG_DLL_DECL std::string* Check##func##expected##Impl( \ 719 const char* s1, const char* s2, const char* names); 724 #undef DECLARE_CHECK_STROP_IMPL 728 #define CHECK_STROP(func, op, expected, s1, s2) \ 729 while (google::CheckOpString _result = google::Check##func##expected##Impl( \ 730 (s1), (s2), #s1 " " #op " " #s2)) \ 731 LOG(FATAL) << *_result.str_ 740 #define CHECK_STREQ(s1, s2) CHECK_STROP(strcmp, ==, true, s1, s2) 741 #define CHECK_STRNE(s1, s2) CHECK_STROP(strcmp, !=, false, s1, s2) 742 #define CHECK_STRCASEEQ(s1, s2) CHECK_STROP(strcasecmp, ==, true, s1, s2) 743 #define CHECK_STRCASENE(s1, s2) CHECK_STROP(strcasecmp, !=, false, s1, s2) 745 #define CHECK_INDEX(I, A) CHECK(I < (sizeof(A) / sizeof(A[0]))) 746 #define CHECK_BOUND(B, A) CHECK(B <= (sizeof(A) / sizeof(A[0]))) 748 #define CHECK_DOUBLE_EQ(val1, val2) \ 750 CHECK_LE((val1), (val2) + 0.000000000000001L); \ 751 CHECK_GE((val1), (val2)-0.000000000000001L); \ 754 #define CHECK_NEAR(val1, val2, margin) \ 756 CHECK_LE((val1), (val2) + (margin)); \ 757 CHECK_GE((val1), (val2) - (margin)); \ 766 #define PLOG(severity) GOOGLE_PLOG(severity, 0).stream() 768 #define GOOGLE_PLOG(severity, counter) \ 769 google::ErrnoLogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 770 counter, &google::LogMessage::SendToLog) 772 #define PLOG_IF(severity, condition) \ 773 static_cast<void>(0), \ 774 !(condition) ? (void)0 : google::LogMessageVoidify() & PLOG(severity) 779 #define PCHECK(condition) \ 780 PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN(!(condition))) \ 781 << "Check failed: " #condition " " 791 #define CHECK_ERR(invocation) \ 792 PLOG_IF(FATAL, GOOGLE_PREDICT_BRANCH_NOT_TAKEN((invocation) == -1)) \ 797 #define LOG_EVERY_N_VARNAME(base, line) LOG_EVERY_N_VARNAME_CONCAT(base, line) 798 #define LOG_EVERY_N_VARNAME_CONCAT(base, line) base##line 800 #define LOG_OCCURRENCES LOG_EVERY_N_VARNAME(occurrences_, __LINE__) 801 #define LOG_OCCURRENCES_MOD_N LOG_EVERY_N_VARNAME(occurrences_mod_n_, __LINE__) 803 #define SOME_KIND_OF_LOG_EVERY_N(severity, n, what_to_do) \ 804 static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ 806 if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ 807 if (LOG_OCCURRENCES_MOD_N == 1) \ 808 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 809 LOG_OCCURRENCES, &what_to_do) \ 812 #define SOME_KIND_OF_LOG_IF_EVERY_N(severity, condition, n, what_to_do) \ 813 static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ 816 ((LOG_OCCURRENCES_MOD_N = (LOG_OCCURRENCES_MOD_N + 1) % n) == (1 % n))) \ 817 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 818 LOG_OCCURRENCES, &what_to_do) \ 821 #define SOME_KIND_OF_PLOG_EVERY_N(severity, n, what_to_do) \ 822 static int LOG_OCCURRENCES = 0, LOG_OCCURRENCES_MOD_N = 0; \ 824 if (++LOG_OCCURRENCES_MOD_N > n) LOG_OCCURRENCES_MOD_N -= n; \ 825 if (LOG_OCCURRENCES_MOD_N == 1) \ 826 google::ErrnoLogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 827 LOG_OCCURRENCES, &what_to_do) \ 830 #define SOME_KIND_OF_LOG_FIRST_N(severity, n, what_to_do) \ 831 static int LOG_OCCURRENCES = 0; \ 832 if (LOG_OCCURRENCES <= n) ++LOG_OCCURRENCES; \ 833 if (LOG_OCCURRENCES <= n) \ 834 google::LogMessage(__FILE__, __LINE__, google::GLOG_##severity, \ 835 LOG_OCCURRENCES, &what_to_do) \ 838 namespace logging_internal {
844 #define LOG_EVERY_N(severity, n) \ 845 SOME_KIND_OF_LOG_EVERY_N(severity, (n), google::LogMessage::SendToLog) 847 #define SYSLOG_EVERY_N(severity, n) \ 848 SOME_KIND_OF_LOG_EVERY_N(severity, (n), \ 849 google::LogMessage::SendToSyslogAndLog) 851 #define PLOG_EVERY_N(severity, n) \ 852 SOME_KIND_OF_PLOG_EVERY_N(severity, (n), google::LogMessage::SendToLog) 854 #define LOG_FIRST_N(severity, n) \ 855 SOME_KIND_OF_LOG_FIRST_N(severity, (n), google::LogMessage::SendToLog) 857 #define LOG_IF_EVERY_N(severity, condition, n) \ 858 SOME_KIND_OF_LOG_IF_EVERY_N(severity, (condition), (n), \ 859 google::LogMessage::SendToLog) 869 #define COMPACT_GOOGLE_LOG_0 COMPACT_GOOGLE_LOG_ERROR 870 #define SYSLOG_0 SYSLOG_ERROR 871 #define LOG_TO_STRING_0 LOG_TO_STRING_ERROR 880 #define DLOG(severity) LOG(severity) 881 #define DVLOG(verboselevel) VLOG(verboselevel) 882 #define DLOG_IF(severity, condition) LOG_IF(severity, condition) 883 #define DLOG_EVERY_N(severity, n) LOG_EVERY_N(severity, n) 884 #define DLOG_IF_EVERY_N(severity, condition, n) \ 885 LOG_IF_EVERY_N(severity, condition, n) 886 #define DLOG_ASSERT(condition) LOG_ASSERT(condition) 889 #define DCHECK(condition) CHECK(condition) 890 #define DCHECK_EQ(val1, val2) CHECK_EQ(val1, val2) 891 #define DCHECK_NE(val1, val2) CHECK_NE(val1, val2) 892 #define DCHECK_LE(val1, val2) CHECK_LE(val1, val2) 893 #define DCHECK_LT(val1, val2) CHECK_LT(val1, val2) 894 #define DCHECK_GE(val1, val2) CHECK_GE(val1, val2) 895 #define DCHECK_GT(val1, val2) CHECK_GT(val1, val2) 896 #define DCHECK_NOTNULL(val) CHECK_NOTNULL(val) 897 #define DCHECK_STREQ(str1, str2) CHECK_STREQ(str1, str2) 898 #define DCHECK_STRCASEEQ(str1, str2) CHECK_STRCASEEQ(str1, str2) 899 #define DCHECK_STRNE(str1, str2) CHECK_STRNE(str1, str2) 900 #define DCHECK_STRCASENE(str1, str2) CHECK_STRCASENE(str1, str2) 902 #else // !DCHECK_IS_ON() 904 #define DLOG(severity) \ 905 static_cast<void>(0), \ 906 true ? (void)0 : google::LogMessageVoidify() & LOG(severity) 908 #define DVLOG(verboselevel) \ 909 static_cast<void>(0), (true || !VLOG_IS_ON(verboselevel)) \ 911 : google::LogMessageVoidify() & LOG(INFO) 913 #define DLOG_IF(severity, condition) \ 914 static_cast<void>(0), (true || !(condition)) \ 916 : google::LogMessageVoidify() & LOG(severity) 918 #define DLOG_EVERY_N(severity, n) \ 919 static_cast<void>(0), \ 920 true ? (void)0 : google::LogMessageVoidify() & LOG(severity) 922 #define DLOG_IF_EVERY_N(severity, condition, n) \ 923 static_cast<void>(0), (true || !(condition)) \ 925 : google::LogMessageVoidify() & LOG(severity) 927 #define DLOG_ASSERT(condition) \ 928 static_cast<void>(0), true ? (void)0 : LOG_ASSERT(condition) 931 #define DCHECK(condition) \ 932 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 933 while (false) GLOG_MSVC_POP_WARNING() CHECK(condition) 935 #define DCHECK_EQ(val1, val2) \ 936 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 937 while (false) GLOG_MSVC_POP_WARNING() CHECK_EQ(val1, val2) 939 #define DCHECK_NE(val1, val2) \ 940 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 941 while (false) GLOG_MSVC_POP_WARNING() CHECK_NE(val1, val2) 943 #define DCHECK_LE(val1, val2) \ 944 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 945 while (false) GLOG_MSVC_POP_WARNING() CHECK_LE(val1, val2) 947 #define DCHECK_LT(val1, val2) \ 948 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 949 while (false) GLOG_MSVC_POP_WARNING() CHECK_LT(val1, val2) 951 #define DCHECK_GE(val1, val2) \ 952 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 953 while (false) GLOG_MSVC_POP_WARNING() CHECK_GE(val1, val2) 955 #define DCHECK_GT(val1, val2) \ 956 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 957 while (false) GLOG_MSVC_POP_WARNING() CHECK_GT(val1, val2) 961 #define DCHECK_NOTNULL(val) (val) 963 #define DCHECK_STREQ(str1, str2) \ 964 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 965 while (false) GLOG_MSVC_POP_WARNING() CHECK_STREQ(str1, str2) 967 #define DCHECK_STRCASEEQ(str1, str2) \ 968 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 969 while (false) GLOG_MSVC_POP_WARNING() CHECK_STRCASEEQ(str1, str2) 971 #define DCHECK_STRNE(str1, str2) \ 972 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 973 while (false) GLOG_MSVC_POP_WARNING() CHECK_STRNE(str1, str2) 975 #define DCHECK_STRCASENE(str1, str2) \ 976 GLOG_MSVC_PUSH_DISABLE_WARNING(4127) \ 977 while (false) GLOG_MSVC_POP_WARNING() CHECK_STRCASENE(str1, str2) 979 #endif // DCHECK_IS_ON() 983 #define VLOG(verboselevel) LOG_IF(INFO, VLOG_IS_ON(verboselevel)) 985 #define VLOG_EVERY_N(verboselevel, n) \ 986 LOG_IF_EVERY_N(INFO, VLOG_IS_ON(verboselevel), n) 988 namespace base_logging {
999 virtual int_type
overflow(int_type ch) {
return ch; }
1002 size_t pcount()
const {
return pptr() - pbase(); }
1003 char*
pbase()
const {
return std::streambuf::pbase(); }
1039 : std::ostream(NULL), streambuf_(buf, len), ctr_(ctr), self_(this) {
1043 int ctr()
const {
return ctr_; }
1048 size_t pcount()
const {
return streambuf_.pcount(); }
1049 char*
pbase()
const {
return streambuf_.pbase(); }
1050 char*
str()
const {
return pbase(); }
1065 SendMethod send_method);
1088 bool also_send_to_log);
1094 std::vector<std::string>* outvec);
1119 void SendToSyslogAndLog();
1124 std::ostream& stream();
1126 int preserved_errno()
const;
1129 static int64_t num_messages(
int severity);
1135 void SendToSinkAndLog();
1139 void WriteToStringAndLog();
1141 void SaveOrSendToLog();
1175 inline void LogAtLevel(
int const severity, std::string
const& msg) {
1183 #define LOG_AT_LEVEL(severity) \ 1184 google::LogMessage(__FILE__, __LINE__, severity).stream() 1195 #if (defined(__GXX_EXPERIMENTAL_CXX0X__) || __cplusplus >= 201103L || \ 1196 (defined(_MSC_VER) && _MSC_VER >= 1900)) 1205 template <
typename T>
1208 LogMessageFatal(
file, line,
new std::string(names));
1210 return std::forward<T>(t);
1216 template <
typename T>
1254 void operator&(std::ostream&) {}
1272 const char* base_filename);
1281 const char* symlink_basename);
1295 virtual void send(
LogSeverity severity,
const char* full_filename,
1296 const char* base_filename,
int line,
1297 const struct ::tm* tm_time,
const char*
message,
1298 size_t message_len) = 0;
1313 virtual void WaitTillSent();
1318 const struct ::tm* tm_time,
const char*
message,
1319 size_t message_len);
1333 const char* filename_extension);
1358 std::vector<std::string>* list);
1394 virtual void Write(
bool force_flush, time_t timestamp,
const char*
message,
1395 int message_len) = 0;
1398 virtual void Flush() = 0;
1403 virtual uint32_t LogSize() = 0;
1445 :
LogMessage::LogStream(message_buffer_, 1, 0) {}
1452 char message_buffer_[2];
1477 #endif // OR_TOOLS_BASE_LOGGING_H_
void InitGoogleLogging(const char *argv0)
#define GLOG_MSVC_POP_WARNING()
void FixFlagsAndEnvironmentForSwig()
void SetLogDestination(LogSeverity severity, const char *base_filename)
void AddLogSink(LogSink *destination)
const absl::string_view ToString(MPSolver::OptimizationProblemType optimization_problem_type)
void MakeCheckOpValueString(std::ostream *os, const char &v)
NullStreamFatal(const char *file, int line, const CheckOpString &result)
virtual int_type overflow(int_type ch)
ATTRIBUTE_NORETURN ~NullStreamFatal()
T * CheckNotNull(const char *file, int line, const char *names, T *t)
ostream & operator<<(ostream &os, const PRIVATE_Counter &)
void TestOnly_ClearLoggingDirectoriesList()
const T & GetReferenceableValue(const T &t)
GOOGLE_GLOG_DLL_DECL Logger * GetLogger(LogSeverity level)
#define ATTRIBUTE_NORETURN
void FlushLogFilesUnsafe(LogSeverity min_severity)
static const size_t kMaxLogMessageLen
GOOGLE_GLOG_DLL_DECL void SetLogger(LogSeverity level, Logger *logger)
std::ostream & operator<<(std::ostream &out, const google::DummyClassToDefineOperator &)
const char * GetLogSeverityName(LogSeverity severity)
#define GOOGLE_PREDICT_BRANCH_NOT_TAKEN(x)
std::string * MakeCheckOpString(const T1 &v1, const T2 &v2, const char *exprtext) ATTRIBUTE_NOINLINE
#define ATTRIBUTE_NOINLINE
LogSeverity NormalizeSeverity(LogSeverity s)
void RemoveLogSink(LogSink *destination)
void FlushLogFiles(LogSeverity min_severity)
LogStream(char *buf, int len, int ctr)
int posix_strerror_r(int err, char *buf, size_t len)
void SetLogSymlink(LogSeverity severity, const char *symlink_basename)
ABSL_DECLARE_FLAG(bool, logtostderr)
void GetExistingTempDirectories(vector< string > *list)
CheckOpString(std::string *str)
std::string * NewString()
void InstallFailureFunction(void(*fail_func)())
#define GLOG_MSVC_PUSH_DISABLE_WARNING(n)
void ReprintFatalMessage()
void SetStderrLogging(LogSeverity min_severity)
#define DECLARE_CHECK_STROP_IMPL(func, expected)
void LogAtLevel(int const severity, std::string const &msg)
void SetLogFilenameExtension(const char *ext)
NullStream(const char *, int, const CheckOpString &)
const vector< string > & GetLoggingDirectories()
#define GOOGLE_GLOG_DLL_DECL
DEFINE_CHECK_OP_IMPL(Check_EQ,==) DEFINE_CHECK_OP_IMPL(Check_NE
void ShutdownGoogleLogging()
LogStreamBuf(char *buf, int len)