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 <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 {
147# if CONSOLIX_USE_CXXOPTS == 1
149 m_is_init = true;
150 return true;
151 }
152 if (!has_service<CliArguments>()) return false;
153 auto args = get_service<CliArguments>();
154 if (args.count("debug") || args.count("d")) {
155 CONSOLIX_SET_DEBUG_MODE(true);
156 }
157# endif
158 m_is_init = true;
159 return true;
160 }
161
164 bool is_initialized() const override {
165 return m_is_init;
166 }
167
169 void process() override {}
170
171 private:
172 std::string m_debug_pattern;
173 std::atomic<bool> m_is_init{false};
174
179 void init_logger(
180 const std::string& console_pattern,
181 const std::string& file_pattern,
182 int auto_delete_days) {
183 static bool is_once = false;
184 if (is_once) return;
185 is_once = true;
186
187 LOGIT_ADD_CONSOLE_SINGLE_MODE(console_pattern, true);
188 LOGIT_ADD_CONSOLE_SINGLE_MODE("%^%v%$", true); // Logo log stream
189 LOGIT_ADD_CONSOLE(m_debug_pattern, true); // Debug log stream
190 CONSOLIX_SET_DEBUG_MODE(false);
191
192 // Файловый лорггер
193 LOGIT_ADD_FILE_LOGGER(
195 true,
196 auto_delete_days,
197 file_pattern);
198
199 // Файловый логгер для отедельных больших записей
200 LOGIT_ADD_UNIQUE_FILE_LOGGER_SINGLE_MODE(
202 true,
203 auto_delete_days,
205 "%v");
206 }
207 }; // LoggerComponent
208
209}; // namespace consolix
210
211#else // Fallback for when LogIt is not enabled
212
214
216#define CONSOLIX_STREAM() \
217 consolix::MultiStream()
218
220#define CONSOLIX_LOGO_STREAM() \
221 consolix::MultiStream(false)
222
223namespace consolix {
224
228 public:
229
230 LoggerComponent() = default;
231 virtual ~LoggerComponent() = default;
232
233 protected:
234
235 bool initialize() override {return true;}
236 bool is_initialized() const override {return true;}
237 void process() override {}
238
239 }; // LoggerComponent
240
241}; // namespace consolix
242
243#endif
244
245#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.