Basically LOG(INFO)
is returning you a reference to std::ostream
; to which you are writing your string. Quick look at the glog code shows how it is implemented.
In src/windows/glog/logging.h
- you would see LOG()
is a Macro, acccepting severity as a parameter. This one just appends INFO
to COMPACT_GOOGLE_LOG_
and calls stream()
of it...
#define LOG(severity) COMPACT_GOOGLE_LOG_ ## severity.stream()
the same file has definition of COMPACT_GOOGLE_LOG_INFO
and it shows this is nothing but a function call -
google::LogMessage().stream();
398 #if GOOGLE_STRIP_LOG == 0
399 #define COMPACT_GOOGLE_LOG_INFO google::LogMessage( \ 400 __FILE__, __LINE__)
401 #define LOG_TO_STRING_INFO(message) google::LogMessage( \
402 __FILE__, __LINE__, google::GLOG_INFO, message)
403 #else
404 #define COMPACT_GOOGLE_LOG_INFO google::NullStream()
405 #define LOG_TO_STRING_INFO(message) google::NullStream()
406 #endif
Now, look at the src/logging.cc
file for LogMessage's stream function..
This is returning you a reference to ostream to which you are redirecting your string using <<
LOG(INFO)<<"something";
1476 ostream& LogMessage::stream() {
1477 return data_->stream_;
1478 }
here data_->stream_
is an object of LogStream
which is derived from std::ostream
.