Logger Initializer - Sets Up all the logging handlers required for having the above loggers.
60 {
61
62 g_szProgramStartTimeString = szProgramTimeLogsDir;
63
64
65 std::filesystem::path szFilePath;
66 std::filesystem::path szFilename;
67 szFilePath = szLoggingOutputPath;
68 szFilePath += g_szProgramStartTimeString + "/";
69 szFilename = "console_output";
70
71
72 g_szLoggingOutputPath = szFilePath;
73
74
75 if (!std::filesystem::exists(szFilePath))
76 {
77
78 if (!std::filesystem::create_directories(szFilePath))
79 {
80
81 std::cerr << "Unable to create the logging output directory: " << szFilePath.string() << " for console output file." << std::endl;
82 }
83 }
84 else
85 {
86
87 std::cerr << "Unable to create logging output directory " << szFilePath.string() << ": it already exists." << std::endl;
88 }
89
90
91 std::filesystem::path szFullOutputPath = szFilePath / szFilename;
92
93
94 quill::ConsoleSinkConfig::Colours qColors;
95 qColors.apply_default_colours();
96 qColors.assign_colour_to_log_level(quill::LogLevel::TraceL3, constants::szTraceL3Color);
97 qColors.assign_colour_to_log_level(quill::LogLevel::TraceL2, constants::szTraceL2Color);
98 qColors.assign_colour_to_log_level(quill::LogLevel::TraceL1, constants::szTraceL1Color);
99 qColors.assign_colour_to_log_level(quill::LogLevel::Debug, constants::szDebugColor);
100 qColors.assign_colour_to_log_level(quill::LogLevel::Info, constants::szInfoColor);
101 qColors.assign_colour_to_log_level(quill::LogLevel::Warning, constants::szWarningColor);
102 qColors.assign_colour_to_log_level(quill::LogLevel::Error, constants::szErrorColor);
103 qColors.assign_colour_to_log_level(quill::LogLevel::Critical, constants::szCriticalColor);
104 qColors.assign_colour_to_log_level(quill::LogLevel::Backtrace, constants::szBacktraceColor);
105
106
107 std::string szLogFilePattern = "%(time) %(log_level) [%(thread_id)] [%(file_name):%(line_number)] %(message)";
108 std::string szCSVFilePattern = "%(time),\t%(log_level),\t[%(thread_id)],\t[%(file_name):%(line_number)],\t\"%(message)\"";
109 std::string szConsolePattern = "%(time) %(log_level:9) [%(thread_id)] [%(file_name):%(line_number)] %(message)";
110 std::string szRoveCommPattern = "%(time) %(log_level) [%(thread_id)] [%(file_name):%(line_number)] %(message)";
111 std::string szTimestampPattern = "%Y-%m-%d %H:%M:%S.%Qms";
112
113
114 std::shared_ptr<quill::Sink> qLogFileSink = quill::Frontend::create_or_get_sink<MRDTRotatingFileSink>(
115 szFullOutputPath.replace_extension(".log"),
116 []()
117 {
118 quill::RotatingFileSinkConfig cfg;
119 cfg.set_open_mode('a');
120 return cfg;
121 }(),
122 szLogFilePattern,
123 szTimestampPattern,
124 quill::Timezone::LocalTime
125 );
126
127 std::shared_ptr<quill::Sink> qCSVFileSink = quill::Frontend::create_or_get_sink<MRDTRotatingFileSink>(
128 szFullOutputPath.replace_extension(".csv"),
129 []()
130 {
131 quill::RotatingFileSinkConfig cfg;
132 cfg.set_open_mode('a');
133 return cfg;
134 }(),
135 szCSVFilePattern,
136 szTimestampPattern,
137 quill::Timezone::LocalTime
138 );
139
140 std::shared_ptr<quill::Sink> qConsoleSink =
141 quill::Frontend::create_or_get_sink<MRDTConsoleSink>("ConsoleSink",
142 qColors,
143 quill::ConsoleSinkConfig::ColourMode::Automatic,
144 szConsolePattern,
145 szTimestampPattern
146 );
147
148 std::shared_ptr<quill::Sink> qMRDTRoveCommSink = quill::Frontend::create_or_get_sink<MRDTRoveCommSink>("MRDTRoveCommSink",
149 szRoveCommPattern,
150 szTimestampPattern,
151 quill::Timezone::LocalTime
152 );
153
154
155 quill::BackendOptions qBackendConfig;
156
157
158 quill::Backend::start(qBackendConfig);
159
160
161 g_qFileLogger = quill::Frontend::create_or_get_logger("FILE_LOGGER", {qLogFileSink, qCSVFileSink});
162 g_qConsoleLogger = quill::Frontend::create_or_get_logger("CONSOLE_LOGGER", {qConsoleSink});
163 g_qRoveCommLogger = quill::Frontend::create_or_get_logger("ROVECOMM_LOGGER", {qMRDTRoveCommSink});
164 g_qSharedLogger = quill::Frontend::create_or_get_logger("SHARED_LOGGER", {qLogFileSink, qCSVFileSink, qConsoleSink, qMRDTRoveCommSink});
165
166
167 g_eFileLogLevel = constants::FILE_DEFAULT_LEVEL;
168 g_eConsoleLogLevel = constants::CONSOLE_DEFAULT_LEVEL;
169 g_eRoveCommLogLevel = constants::ROVECOMM_DEFAULT_LEVEL;
170
171
172 g_qFileLogger->set_log_level(quill::LogLevel::TraceL3);
173 g_qConsoleLogger->set_log_level(quill::LogLevel::TraceL3);
174 g_qSharedLogger->set_log_level(quill::LogLevel::TraceL3);
175 g_qRoveCommLogger->set_log_level(quill::LogLevel::Info);
176
177
178 g_qFileLogger->init_backtrace(10, quill::LogLevel::Critical);
179 g_qConsoleLogger->init_backtrace(10, quill::LogLevel::Critical);
180 g_qRoveCommLogger->init_backtrace(10, quill::LogLevel::Critical);
181 g_qSharedLogger->init_backtrace(10, quill::LogLevel::Critical);
182 }