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()
220
221namespace consolix {
222
225 class LoggerComponent : public IApplicationComponent {
226 public:
227
228 LoggerComponent() = default;
229 virtual ~LoggerComponent() = default;
230
231 protected:
232
233 bool initialize() override {
234 return true;
235 }
236
237 bool is_initialized() const override {
238 return true;
239 }
240
241 void execute() override {}
242
243 }; // LoggerComponent
244
245}; // namespace consolix
246
247#endif
248
249#endif // _CONSOLIX_LOGGER_COMPONENT_HPP_INCLUDED
MultiStream class for unified log output handling.
bool is_initialized() const override
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.