\class LogStreamConsumer \brief Convenience object used to facilitate use of C++ stream syntax when logging messages. Order of base classes is LogStreamConsumerBase and then std::ostream. This is because the LogStreamConsumerBase class is used to initialize the LogStreamConsumerBuffer member field in LogStreamConsumer and then the address of the buffer is passed to std::ostream. This is necessary
| 131 | //! Please do not change the order of the parent classes. |
| 132 | //! |
| 133 | class LogStreamConsumer : protected LogStreamConsumerBase, public std::ostream |
| 134 | { |
| 135 | public: |
| 136 | //! \brief Creates a LogStreamConsumer which logs messages with level severity. |
| 137 | //! Reportable severity determines if the messages are severe enough to be logged. |
| 138 | LogStreamConsumer(Severity reportableSeverity, Severity severity) |
| 139 | : LogStreamConsumerBase(severityOstream(severity), severityPrefix(severity), severity <= reportableSeverity) |
| 140 | , std::ostream(&mBuffer) // links the stream buffer with the stream |
| 141 | , mShouldLog(severity <= reportableSeverity) |
| 142 | , mSeverity(severity) |
| 143 | { |
| 144 | } |
| 145 | |
| 146 | LogStreamConsumer(LogStreamConsumer&& other) |
| 147 | : LogStreamConsumerBase(severityOstream(other.mSeverity), severityPrefix(other.mSeverity), other.mShouldLog) |
| 148 | , std::ostream(&mBuffer) // links the stream buffer with the stream |
| 149 | , mShouldLog(other.mShouldLog) |
| 150 | , mSeverity(other.mSeverity) |
| 151 | { |
| 152 | } |
| 153 | |
| 154 | void setReportableSeverity(Severity reportableSeverity) |
| 155 | { |
| 156 | mShouldLog = mSeverity <= reportableSeverity; |
| 157 | mBuffer.setShouldLog(mShouldLog); |
| 158 | } |
| 159 | |
| 160 | private: |
| 161 | static std::ostream& severityOstream(Severity severity) |
| 162 | { |
| 163 | return severity >= Severity::kINFO ? std::cout : std::cerr; |
| 164 | } |
| 165 | |
| 166 | static std::string severityPrefix(Severity severity) |
| 167 | { |
| 168 | switch (severity) |
| 169 | { |
| 170 | case Severity::kINTERNAL_ERROR: return "[F] "; |
| 171 | case Severity::kERROR: return "[E] "; |
| 172 | case Severity::kWARNING: return "[W] "; |
| 173 | case Severity::kINFO: return "[I] "; |
| 174 | case Severity::kVERBOSE: return "[V] "; |
| 175 | default: assert(0); return ""; |
| 176 | } |
| 177 | } |
| 178 | |
| 179 | bool mShouldLog; |
| 180 | Severity mSeverity; |
| 181 | }; |
| 182 | |
| 183 | //! \class Logger |
| 184 | //! |