Consolix
Loading...
Searching...
No Matches
LoggerComponent.hpp
Go to the documentation of this file.
1#pragma once
2#ifndef _CONSOLIX_LOGGER_COMPONENT_HPP_INCLUDED
3#define _CONSOLIX_LOGGER_COMPONENT_HPP_INCLUDED
4
8
9#if CONSOLIX_USE_LOGIT == 1
10
13#ifndef CONSOLIX_BASE_PATH
14#define CONSOLIX_BASE_PATH {}
15#endif
16
17#ifndef LOGIT_BASE_PATH
18#define LOGIT_BASE_PATH CONSOLIX_BASE_PATH
19#endif
20
23#define CONSOLIX_LOGIT_CONSOLE_INDEX 0
24
27#define CONSOLIX_LOGIT_LOGO_INDEX 1
28
31#define CONSOLIX_LOGIT_DEBUG_INDEX 2
32
35#define CONSOLIX_LOGIT_LOGGER_INDEX 3
36
39#define CONSOLIX_LOGIT_UNIQUE_FILE_INDEX 4
40
43#define CONSOLIX_STREAM() \
44 consolix::MultiStream( \
45 logit::LogLevel::LOG_LVL_TRACE, \
46 logit::make_relative(__FILE__, LOGIT_BASE_PATH), \
47 __LINE__, \
48 LOGIT_FUNCTION)
49
52#define CONSOLIX_LOGO_STREAM() \
53 LOGIT_STREAM_TRACE_TO(CONSOLIX_LOGIT_LOGO_INDEX)
54
57#define CONSOLIX_UNIQUE_FILE_STREAM() \
58 LOGIT_STREAM_TRACE_TO(CONSOLIX_LOGIT_UNIQUE_FILE_INDEX)
59
62#define CONSOLIX_UNIQUE_FILE_NAME() \
63 LOGIT_GET_LAST_FILE_NAME(CONSOLIX_LOGIT_UNIQUE_FILE_INDEX)
64
67#ifndef CONSOLIX_CONSOLE_PATTERN
68#define CONSOLIX_CONSOLE_PATTERN LOGIT_CONSOLE_PATTERN
69#endif
70
73#ifndef CONSOLIX_CONSOLE_DEBUG_PATTERN
74#define CONSOLIX_CONSOLE_DEBUG_PATTERN "%H:%M:%S.%e | [%25!g:%#] [%l] %^%v%$"
75#endif
76
79#ifndef CONSOLIX_FILE_LOGGER_PATTERN
80#define CONSOLIX_FILE_LOGGER_PATTERN LOGIT_FILE_LOGGER_PATTERN
81#endif
82
85#ifndef CONSOLIX_FILE_LOGGER_PATH
86#define CONSOLIX_FILE_LOGGER_PATH LOGIT_FILE_LOGGER_PATH
87#endif
88
91#ifndef CONSOLIX_UNIQUE_FILE_LOGGER_PATH
92#define CONSOLIX_UNIQUE_FILE_LOGGER_PATH LOGIT_UNIQUE_FILE_LOGGER_PATH
93#endif
94
97#ifndef CONSOLIX_FILE_LOGGER_AUTO_DELETE_DAYS
98#define CONSOLIX_FILE_LOGGER_AUTO_DELETE_DAYS LOGIT_FILE_LOGGER_AUTO_DELETE_DAYS
99#endif
100
103#ifndef CONSOLIX_UNIQUE_FILE_LOGGER_HASH_LENGTH
104#define CONSOLIX_UNIQUE_FILE_LOGGER_HASH_LENGTH LOGIT_UNIQUE_FILE_LOGGER_HASH_LENGTH
105#endif
106
109#define CONSOLIX_SET_DEBUG_MODE(mode) \
110 LOGIT_SET_LOGGER_ENABLED(CONSOLIX_LOGIT_DEBUG_INDEX, mode)
111
112#include <log-it/LogIt.hpp>
114
115namespace consolix {
116
122 class LoggerComponent : public IAppComponent {
123 public:
124
131 const std::string& console_pattern = CONSOLIX_CONSOLE_PATTERN,
132 const std::string& console_debug_pattern = CONSOLIX_CONSOLE_DEBUG_PATTERN,
133 const std::string& file_pattern = CONSOLIX_FILE_LOGGER_PATTERN,
134 const int auto_delete_days = CONSOLIX_FILE_LOGGER_AUTO_DELETE_DAYS)
135 : m_debug_pattern(console_debug_pattern) {
136 init_logger(console_pattern, file_pattern, auto_delete_days);
137 }
138
140 virtual ~LoggerComponent() = default;
141
142 protected:
143
146 bool initialize() override {
148 m_is_init = true;
149 return true;
150 }
151 if (!has_service<CliArguments>()) return false;
152 auto args = get_service<CliArguments>();
153 if (args.count("debug") || args.count("d")) {
154 CONSOLIX_SET_DEBUG_MODE(true);
155 }
156 m_is_init = true;
157 return true;
158 }
159
162 bool is_initialized() const override {
163 return m_is_init;
164 }
165
167 void process() override {}
168
169 private:
170 std::string m_debug_pattern;
171 std::atomic<bool> m_is_init{false};
172
177 void init_logger(
178 const std::string& console_pattern,
179 const std::string& file_pattern,
180 int auto_delete_days) {
181 static bool is_once = false;
182 if (is_once) return;
183 is_once = true;
184
185 LOGIT_ADD_CONSOLE_SINGLE_MODE(console_pattern, true);
186 LOGIT_ADD_CONSOLE_SINGLE_MODE("%^%v%$", true); // Logo log stream
187 LOGIT_ADD_CONSOLE(m_debug_pattern, true); // Debug log stream
188 CONSOLIX_SET_DEBUG_MODE(false);
189
190 // Файловый лорггер
191 LOGIT_ADD_FILE_LOGGER(
193 true,
194 auto_delete_days,
195 file_pattern);
196
197 // Файловый логгер для отедельных больших записей
198 LOGIT_ADD_UNIQUE_FILE_LOGGER_SINGLE_MODE(
200 true,
201 auto_delete_days,
203 "%v");
204 }
205 }; // LoggerComponent
206
207}; // namespace consolix
208
209#else // Fallback for when LogIt is not enabled
210
212
214#define CONSOLIX_STREAM() \
215 consolix::MultiStream()
216
218#define CONSOLIX_LOGO_STREAM() \
219 consolix::MultiStream(false)
220
221namespace consolix {
222
226 public:
227
228 LoggerComponent() = default;
229 virtual ~LoggerComponent() = default;
230
231 protected:
232
233 bool initialize() override {return true;}
234 bool is_initialized() const override {return true;}
235 void process() override {}
236
237 }; // LoggerComponent
238
239}; // namespace consolix
240
241#endif
242
243#endif // _CONSOLIX_LOGGER_COMPONENT_HPP_INCLUDED
MultiStream class for unified log output handling.
Interface for defining application components.
bool initialize() override
Initializes the component. This method is called once before the component is processed.
bool is_initialized() const override
Checks if the component is initialized. Used to verify if the component is ready to be executed.
void process() override
Executes the component's main logic. Called repeatedly during the application's main execution loop.
virtual ~LoggerComponent()=default
#define CONSOLIX_FILE_LOGGER_PATTERN
File log message pattern.
#define CONSOLIX_FILE_LOGGER_PATH
Default file logger path.
#define CONSOLIX_UNIQUE_FILE_LOGGER_PATH
Default unique file logger path.
#define CONSOLIX_UNIQUE_FILE_LOGGER_HASH_LENGTH
Default hash length for unique file names.
#define CONSOLIX_CONSOLE_PATTERN
Console log message pattern.
#define CONSOLIX_FILE_LOGGER_AUTO_DELETE_DAYS
Auto-delete log files older than the specified number of days.
#define CONSOLIX_CONSOLE_DEBUG_PATTERN
Debug console log message pattern.
< Utility modules and helpers.
T & get_service()
Retrieves a resource globally. Retrieves a reference to a globally registered resource from the Servi...
bool has_service()
Checks if a resource is registered globally.