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