\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
| 140 | //! Please do not change the order of the parent classes. |
| 141 | //! |
| 142 | class LogStreamConsumer : protected LogStreamConsumerBase, public std::ostream |
| 143 | { |
| 144 | public: |
| 145 | //! |
| 146 | //! \brief Creates a LogStreamConsumer which logs messages with level severity. |
| 147 | //! Reportable severity determines if the messages are severe enough to be logged. |
| 148 | //! |
| 149 | LogStreamConsumer(nvinfer1::ILogger::Severity reportableSeverity, nvinfer1::ILogger::Severity severity) |
| 150 | : LogStreamConsumerBase(severityOstream(severity), severityPrefix(severity), severity <= reportableSeverity) |
| 151 | , std::ostream(&mBuffer) // links the stream buffer with the stream |
| 152 | , mShouldLog(severity <= reportableSeverity) |
| 153 | , mSeverity(severity) |
| 154 | { |
| 155 | } |
| 156 | |
| 157 | LogStreamConsumer(LogStreamConsumer&& other) noexcept |
| 158 | : LogStreamConsumerBase(severityOstream(other.mSeverity), severityPrefix(other.mSeverity), other.mShouldLog) |
| 159 | , std::ostream(&mBuffer) // links the stream buffer with the stream |
| 160 | , mShouldLog(other.mShouldLog) |
| 161 | , mSeverity(other.mSeverity) |
| 162 | { |
| 163 | } |
| 164 | LogStreamConsumer(const LogStreamConsumer& other) = delete; |
| 165 | LogStreamConsumer() = delete; |
| 166 | ~LogStreamConsumer() override = default; |
| 167 | LogStreamConsumer& operator=(const LogStreamConsumer&) = delete; |
| 168 | LogStreamConsumer& operator=(LogStreamConsumer&&) = delete; |
| 169 | |
| 170 | void setReportableSeverity(Severity reportableSeverity) |
| 171 | { |
| 172 | mShouldLog = mSeverity <= reportableSeverity; |
| 173 | mBuffer.setShouldLog(mShouldLog); |
| 174 | } |
| 175 | |
| 176 | std::mutex& getMutex() |
| 177 | { |
| 178 | return mLogMutex; |
| 179 | } |
| 180 | |
| 181 | bool getShouldLog() const |
| 182 | { |
| 183 | return mShouldLog; |
| 184 | } |
| 185 | |
| 186 | private: |
| 187 | static std::ostream& severityOstream(Severity severity) |
| 188 | { |
| 189 | return severity >= Severity::kINFO ? std::cout : std::cerr; |
| 190 | } |
| 191 | |
| 192 | static std::string severityPrefix(Severity severity) |
| 193 | { |
| 194 | switch (severity) |
| 195 | { |
| 196 | case Severity::kINTERNAL_ERROR: return "[F] "; |
| 197 | case Severity::kERROR: return "[E] "; |
| 198 | case Severity::kWARNING: return "[W] "; |
| 199 | case Severity::kINFO: return "[I] "; |