@@ -159,9 +159,78 @@ class Logger::LoggerImpl
159159 SEGGER_RTT_MODE_BLOCK_IF_FIFO_FULL);
160160 }
161161
162- void logString (std::string_view _toLog) const noexcept
162+ auto formatMessage (std::span<char > formatBuffer, LogSeverity severity, std::string_view _toLog)
163+ const noexcept
164+ {
165+ switch (severity)
166+ {
167+ case LogSeverity::Trace:
168+ return fmt::format_to_n (
169+ formatBuffer.data (),
170+ formatBuffer.size (),
171+ " {} {} {}\n " ,
172+ RTT_CTRL_TEXT_WHITE,
173+ severityToString (severity),
174+ _toLog.data ());
175+ break ;
176+ case LogSeverity::Debug:
177+ return fmt::format_to_n (
178+ formatBuffer.data (),
179+ formatBuffer.size (),
180+ " {} {} {}\n " ,
181+ RTT_CTRL_TEXT_BRIGHT_WHITE,
182+ severityToString (severity),
183+ _toLog.data ());
184+ break ;
185+ case LogSeverity::Info:
186+ return fmt::format_to_n (
187+ formatBuffer.data (),
188+ formatBuffer.size (),
189+ " {} {} {}\n " ,
190+ RTT_CTRL_TEXT_MAGENTA,
191+ severityToString (severity),
192+ _toLog.data ());
193+ break ;
194+ case LogSeverity::Warn:
195+ return fmt::format_to_n (
196+ formatBuffer.data (),
197+ formatBuffer.size (),
198+ " {} {} {}\n " ,
199+ RTT_CTRL_TEXT_BRIGHT_YELLOW,
200+ severityToString (severity),
201+ _toLog.data ());
202+ break ;
203+ case LogSeverity::Error:
204+ return fmt::format_to_n (
205+ formatBuffer.data (),
206+ formatBuffer.size (),
207+ " {} {} {}\n " ,
208+ RTT_CTRL_TEXT_BRIGHT_RED,
209+ severityToString (severity),
210+ _toLog.data ());
211+ break ;
212+ case LogSeverity::None:
213+ break ;
214+ default :
215+ break ;
216+ }
217+
218+ std::terminate ();
219+ }
220+ void logString (LogSeverity severity, std::string_view _toLog) const noexcept
221+ {
222+ std::array<char , 1024 > formatBuffer{};
223+ auto formatResult = formatMessage (
224+ std::span (formatBuffer.data (), formatBuffer.size () - 1 ), severity, _toLog);
225+ formatBuffer[formatResult.size + 1 ] = ' \0 ' ;
226+ auto formatString =
227+ std::string_view (formatBuffer.data (), formatBuffer.data () + formatResult.size + 1 );
228+
229+ SEGGER_RTT_Write (0 , formatString.data (), formatString.size ());
230+ }
231+
232+ void completeMessage ()
163233 {
164- SEGGER_RTT_WriteString (0 , _toLog.data ());
165234 }
166235 static constexpr inline std::uint16_t kSeggerBufferSize = 512 ;
167236 static inline std::array<std::uint8_t , kSeggerBufferSize > seggerBuffer{};
@@ -173,9 +242,33 @@ class Logger::LoggerImpl
173242{
174243
175244public:
176- void logString (std::string_view _toLog) const noexcept
245+ void logString (LogSeverity severity, std::string_view _toLog) const noexcept
177246 {
178- fmt::print (fg (fmt::color::steel_blue), " {}" , _toLog.data ());
247+
248+ switch (severity)
249+ {
250+ case LogSeverity::Trace:
251+ fmt::print (
252+ fg (fmt::color::white_smoke), " {} {}\n " , severityToString (severity), _toLog.data ());
253+ break ;
254+ case LogSeverity::Debug:
255+ fmt::print (fg (fmt::color::white), " {} {}\n " , severityToString (severity), _toLog.data ());
256+ break ;
257+ case LogSeverity::Info:
258+ fmt::print (fg (fmt::color::blue), " {} {}\n " , severityToString (severity), _toLog.data ());
259+ break ;
260+ case LogSeverity::Warn:
261+ fmt::print (
262+ fg (fmt::color::yellow), " {} {}\n " , severityToString (severity), _toLog.data ());
263+ break ;
264+ case LogSeverity::Error:
265+ fmt::print (fg (fmt::color::red), " {} {}\n " , severityToString (severity), _toLog.data ());
266+ break ;
267+ case LogSeverity::None:
268+ break ;
269+ default :
270+ break ;
271+ }
179272#if defined USE_MSVC_DEBUG_OUT
180273 OutputDebugString (_toLog.data ());
181274#endif
@@ -195,7 +288,5 @@ Logger& Logger::Instance() noexcept
195288
196289void Logger::logDebugImpl (LogSeverity severity, std::string_view _toLog) noexcept
197290{
198- m_pLoggerImpl->logString (severityToString (severity));
199- m_pLoggerImpl->logString (_toLog);
200- m_pLoggerImpl->logString (CaretReset);
291+ m_pLoggerImpl->logString (severity, _toLog);
201292}
0 commit comments