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