M config/ProjectConfig.cmake => config/ProjectConfig.cmake +7 -2
@@ 1,13 1,18 @@
+# set LOG_USE_COLOR
+if((${PROJECT_TARGET} STREQUAL "TARGET_RT1051"))
+ set (LOG_USE_COLOR 0 CACHE INTERNAL "")
+else()
+ set (LOG_USE_COLOR 1 CACHE INTERNAL "")
+endif()
+
# add SystemView enable option
option(SYSTEMVIEW "SYSTEMVIEW" OFF)
if((${PROJECT_TARGET} STREQUAL "TARGET_RT1051") AND (${SYSTEMVIEW} STREQUAL "ON"))
set (SYSTEM_VIEW_ENABLED 1 CACHE INTERNAL "")
- set (LOG_USE_COLOR 0 CACHE INTERNAL "")
set (LOG_REDIRECT "RTT_SYSTEMVIEW" CACHE INTERNAL "")
else()
set (SYSTEMVIEW 0FF CACHE INTERNAL "")
set (SYSTEM_VIEW_ENABLED 0 CACHE INTERNAL "")
- set (LOG_USE_COLOR 1 CACHE INTERNAL "")
set (LOG_REDIRECT "RTT_JLINK" CACHE INTERNAL "")
endif()
M module-utils/board/cross/log_rt1051.cpp => module-utils/board/cross/log_rt1051.cpp +6 -2
@@ 32,12 32,16 @@ namespace Log
loggerBufferCurrentPos += snprintf(&loggerBuffer[loggerBufferCurrentPos],
loggerBufferSizeLeft(),
- "%-5s [%s] %s:%s:%d: ",
+ "%s%-5s %s[%s] %s%s:%s:%d:%s ",
+ logColors->levelColors[level].data(),
level_names[level],
+ logColors->serviceNameColor.data(),
getTaskDesc(),
+ logColors->callerInfoColor.data(),
file,
function,
- line);
+ line,
+ logColors->resetColor.data());
}
bool Logger::filterLogs(logger_level level)
M module-utils/board/linux/log_linux.cpp => module-utils/board/linux/log_linux.cpp +6 -16
@@ 7,10 7,6 @@
#include <string_view>
#include <ticks.hpp>
-#if LOG_USE_COLOR == 1
-static const char *level_colors[] = {"\x1b[94m", "\x1b[36m", "\x1b[32m", "\x1b[33m", "\x1b[31m", "\x1b[35m"};
-#endif
-
namespace Log
{
void Logger::addLogHeader(logger_level level, const char *file, int line, const char *function)
@@ 19,23 15,17 @@ namespace Log
LOGGER_BUFFER_SIZE - loggerBufferCurrentPos,
"%d ms ",
cpp_freertos::Ticks::TicksToMs(cpp_freertos::Ticks::GetTicks()));
-#if LOG_USE_COLOR == 1
- loggerBufferCurrentPos += snprintf(&loggerBuffer[loggerBufferCurrentPos],
- LOGGER_BUFFER_SIZE - loggerBufferCurrentPos,
- "%s%-5s\x1b[0m \x1b[90m%s:%d:\x1b[0m ",
- level_colors[level],
- level_names[level],
- file,
- line);
-#else
+
loggerBufferCurrentPos += snprintf(&loggerBuffer[loggerBufferCurrentPos],
LOGGER_BUFFER_SIZE - loggerBufferCurrentPos,
- "%-5s %s:%s:%d: ",
+ "%s%-5s %s%s:%s:%d:%s ",
+ logColors->levelColors[level].data(),
level_names[level],
+ logColors->callerInfoColor.data(),
file,
function,
- line);
-#endif
+ line,
+ logColors->resetColor.data());
}
bool Logger::filterLogs(logger_level _level)
M module-utils/log/Logger.cpp => module-utils/log/Logger.cpp +24 -0
@@ 20,6 20,21 @@ namespace Log
{IRQ_STR, logger_level::LOGTRACE}};
const char *Logger::level_names[] = {"TRACE", "DEBUG", "INFO", "WARN", "ERROR", "FATAL"};
+ void Logger::enableColors(bool enable)
+ {
+ if (!lock()) {
+ return;
+ }
+ auto _ = gsl::finally([this] { unlock(); });
+
+ if (enable) {
+ logColors = &logColorsOn;
+ }
+ else {
+ logColors = &logColorsOff;
+ }
+ }
+
auto Logger::GetLogLevel(const std::string &name) -> logger_level
{
return filtered[name];
@@ 36,6 51,15 @@ namespace Log
return true;
}
+ void Logger::init()
+ {
+#if LOG_USE_COLOR == 1
+ enableColors(true);
+#else
+ enableColors(false);
+#endif
+ }
+
auto Logger::log(Device device, const char *fmt, va_list args) -> int
{
if (!lock()) {
M module-utils/log/Logger.hpp => module-utils/log/Logger.hpp +4 -0
@@ 6,6 6,7 @@
#include <assert.h>
#include <board.h>
#include "log.hpp"
+#include "log_colors.hpp"
#include <map>
#include <mutex.hpp>
#include <string>
@@ 21,11 22,13 @@ namespace Log
class Logger
{
public:
+ void enableColors(bool enable);
[[nodiscard]] static Logger &get()
{
static Logger logger;
return logger;
}
+ void init();
auto log(Device device, const char *fmt, va_list args) -> int;
void log(logger_level level, const char *file, int line, const char *function, const char *fmt, va_list args);
auto logAssert(const char *fmt, va_list args) -> int;
@@ 61,6 64,7 @@ namespace Log
BaseType_t bt;
cpp_freertos::MutexStandard mutex;
logger_level level{LOGTRACE};
+ const LogColors *logColors = &logColorsOff;
char loggerBuffer[LOGGER_BUFFER_SIZE] = {0};
size_t loggerBufferCurrentPos = 0;
A module-utils/log/log_colors.hpp => module-utils/log/log_colors.hpp +51 -0
@@ 0,0 1,51 @@
+// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
+// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md
+
+#pragma once
+
+#include <string_view>
+
+namespace Log
+{
+ static constexpr std::string_view CONSOLE_ESCAPE_NO_COLOR = "";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_RESET = "\x1b[0m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_RED = "\x1b[31m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_GREEN = "\x1b[32m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_YELLOW = "\x1b[33m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_MAGENTA = "\x1b[35m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_CYAN = "\x1b[36m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_LIGHT_GRAY = "\x1b[90m";
+ static constexpr std::string_view CONSOLE_ESCAPE_COLOR_LIGHT_BLUE = "\x1b[94m";
+
+ static constexpr std::string_view levelColorsOn[] = {CONSOLE_ESCAPE_COLOR_LIGHT_BLUE,
+ CONSOLE_ESCAPE_COLOR_CYAN,
+ CONSOLE_ESCAPE_COLOR_GREEN,
+ CONSOLE_ESCAPE_COLOR_YELLOW,
+ CONSOLE_ESCAPE_COLOR_RED,
+ CONSOLE_ESCAPE_COLOR_MAGENTA};
+
+ static constexpr std::string_view levelColorsOff[] = {CONSOLE_ESCAPE_NO_COLOR,
+ CONSOLE_ESCAPE_NO_COLOR,
+ CONSOLE_ESCAPE_NO_COLOR,
+ CONSOLE_ESCAPE_NO_COLOR,
+ CONSOLE_ESCAPE_NO_COLOR,
+ CONSOLE_ESCAPE_NO_COLOR};
+
+ struct LogColors
+ {
+ const std::string_view *levelColors;
+ const std::string_view serviceNameColor;
+ const std::string_view callerInfoColor;
+ const std::string_view resetColor;
+ };
+
+ static constexpr LogColors logColorsOn = {
+ levelColorsOn,
+ CONSOLE_ESCAPE_COLOR_MAGENTA,
+ CONSOLE_ESCAPE_COLOR_LIGHT_GRAY,
+ CONSOLE_ESCAPE_COLOR_RESET,
+ };
+
+ static constexpr LogColors logColorsOff = {
+ levelColorsOff, CONSOLE_ESCAPE_NO_COLOR, CONSOLE_ESCAPE_NO_COLOR, CONSOLE_ESCAPE_NO_COLOR};
+} // namespace Log
M source/main.cpp => source/main.cpp +2 -0
@@ 46,6 46,7 @@
#include <Application.hpp>
#include <ApplicationLauncher.hpp>
#include <log/log.hpp>
+#include <log/Logger.hpp>
#include <phonenumbers/phonenumberutil.h>
#include <source/version.hpp>
#include <SystemManager/SystemManager.hpp>
@@ 97,6 98,7 @@ int main()
sysmgr->StartSystem(
[]() {
vfs.Init();
+ Log::Logger::get().init();
return true;
},
[sysmgr]() {