26
26
#endif
27
27
28
28
#include < string>
29
-
30
29
#include < cstdarg>
31
30
32
- #include < format>
31
+ // #include <format>
32
+
33
+ #ifndef USE_SPDLOG
34
+
35
+ #include < variant> >
36
+
37
+ typedef std::vector<std::variant<int , unsigned int , float , double , std::string>> MultiVarArray_def;
33
38
39
+ #endif
34
40
35
41
enum eLogLevel
36
42
{
@@ -43,6 +49,7 @@ enum eLogLevel
43
49
LogLevel_trace = 6
44
50
};
45
51
52
+
46
53
class CLogger
47
54
{
48
55
std::string m_sLogName;
@@ -89,7 +96,7 @@ class CLogger
89
96
90
97
auto spdlogLevel = ((int )spdlog::level::off - (int )m_nLogLevel);
91
98
92
- spdlog::set_level ((spdlog::level::level_enum)spdlogLevel);
99
+ spdlog::set_level ((spdlog::level::level_enum) spdlogLevel);
93
100
94
101
#else
95
102
@@ -100,51 +107,86 @@ class CLogger
100
107
101
108
#ifndef USE_SPDLOG
102
109
103
- std::string formatString (const std::string& fmt, ... )
110
+ std::string formatString (const std::string& fmt, MultiVarArray_def params )
104
111
{
105
112
std::string sOut = " " ;
106
113
107
- bool bOpenBracketDetected = false ;
114
+ try
115
+ {
116
+ unsigned int argIdx = 0 ;
108
117
109
- unsigned int nParamIdx = 0 ;
118
+ bool bFound = false ;
110
119
111
- va_list args;
112
- va_start (args, fmt);
120
+ std::string insertMarker = " {}" ;
113
121
114
- for (auto x = fmt.begin (); x != fmt.end (); x++)
115
- {
116
- if ((*x) == ' {' ) // check for start-param-insiertion
122
+ std::string sParam ;
123
+
124
+ unsigned int lastPos = 0 ;
125
+
126
+ unsigned int nextPos = fmt.find (insertMarker);
127
+
128
+ auto prm = params.begin ();
129
+
130
+ while (nextPos != std::string::npos)
117
131
{
118
- bOpenBracketDetected = true ;
119
- continue ;
120
- }
121
- else
122
- {
123
- if ((*x) == ' }' )
124
- {
125
- if (bOpenBracketDetected == true )
126
- {
127
- // process next param
132
+ auto len = (nextPos - 1 ) - lastPos;
133
+ if (len > 0 )
134
+ {
135
+ sOut .append (fmt.substr (lastPos, len));
136
+ }
128
137
138
+ if (prm != params.end ())
139
+ {
140
+ if (std::holds_alternative<int >(*prm))
141
+ {
142
+ sParam = std::to_string (std::get<int >(*prm));
143
+ }
144
+ else if (std::holds_alternative<unsigned int >(*prm))
145
+ {
146
+ sParam = std::to_string (std::get<unsigned int >(*prm));
147
+ }
148
+ else if (std::holds_alternative<float >(*prm))
149
+ {
150
+ sParam = std::to_string (std::get<float >(*prm));
151
+ }
152
+ else if (std::holds_alternative<double >(*prm))
153
+ {
154
+ sParam = std::to_string (std::get<double >(*prm));
155
+ }
156
+ else if (std::holds_alternative<std::string>(*prm))
157
+ {
158
+ sParam = std::get<std::string>(*prm);
129
159
}
160
+ else
161
+ {
162
+ sParam .clear ();
163
+ }
164
+
165
+ prm++;
130
166
}
131
- bOpenBracketDetected = false ;
167
+ else
168
+ {
169
+ sParam .clear ();
170
+ }
171
+
172
+ sOut .append (sParam );
132
173
}
133
174
134
- sOut .push_back ((*x));
175
+ if (bFound == false )
176
+ {
177
+ sOut = fmt;
178
+ }
135
179
}
180
+ catch (...)
181
+ {
136
182
183
+ }
137
184
138
- va_end (args);
139
-
185
+ return sOut ;
140
186
}
141
187
142
- void ErrorMsg (unsigned int logLevel, const std::string& msg, ... )
188
+ void ErrorMsg (unsigned int logLevel, const std::string& fmt, MultiVarArray_def params )
143
189
{
144
-
145
- va_list args;
146
- va_start (args, msg);
147
-
148
190
std::string sOut = " " ;
149
191
150
192
switch (logLevel)
@@ -154,12 +196,35 @@ class CLogger
154
196
break ;;
155
197
156
198
case LogLevel_fatal:
157
- sOut = formatString (msg.c_str (), args);
158
- PLOG_FATAL << msg;
199
+ sOut = formatString (fmt, params);
200
+ PLOG_CRITICAL << sOut ;
201
+ break ;
202
+
203
+ case LogLevel_error:
204
+ sOut = formatString (fmt, params);
205
+ PLOG_ERROR << sOut ;
159
206
break ;
160
- }
161
207
162
- va_end (args);
208
+ case LogLevel_warning:
209
+ sOut = formatString (fmt, params);
210
+ PLOG_WARNING << sOut ;
211
+ break ;
212
+
213
+ case LogLevel_info:
214
+ sOut = formatString (fmt, params);
215
+ PLOG_INFO << sOut ;
216
+ break ;
217
+
218
+ case LogLevel_debug:
219
+ sOut = formatString (fmt, params);
220
+ PLOG_DEBUG << sOut ;
221
+ break ;
222
+
223
+ case LogLevel_trace:
224
+ sOut = formatString (fmt, params);
225
+ PLOG_VERBOSE << sOut ;
226
+ break ;
227
+ }
163
228
}
164
229
165
230
#endif
@@ -182,12 +247,12 @@ class CLogger
182
247
183
248
#define LogInit plog::Logger::init
184
249
185
- #define LogCritical (m, ...) spdlog::critical (m, )
186
- #define LogError (m, ...) PLOG_ERROR << m
187
- #define LogWarning (m, ...) PLOG_WARNING << m
188
- #define LogInfo (m, ...) PLOG_INFO << m
189
- #define LogDebug (m, ...) PLOG_ERROR << m
190
- #define LogTrace (m, ...) PLOG_VERBOSE << m
250
+ #define LogCritical (m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_CRITICAL << formatString (m, params);}
251
+ #define LogError (m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_ERROR << formatString (m, params);}
252
+ #define LogWarning (m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_WARNING << formatString (m, params);}
253
+ #define LogInfo (m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_INFO << formatString (m, params);}
254
+ #define LogDebug (m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_DEBUG << formatString (m, params);}
255
+ #define LogTrace (m, ...) {MultiVarArray_def params = {__VA_ARGS__}; PLOG_VERBOSE << formatString (m, params);}
191
256
192
257
#endif
193
258
0 commit comments