Skip to content

Commit b8a8e0f

Browse files
authored
Merge pull request #63 from sy-c/master
added INFOLOGGER_MODE=debug
2 parents 36bb940 + ddf6792 commit b8a8e0f

File tree

4 files changed

+50
-1
lines changed

4 files changed

+50
-1
lines changed

doc/releaseNotes.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,6 @@ This file describes the main feature changes for each InfoLogger released versio
8383

8484
## v1.3.22 - 15/02/2021
8585
- increased test timeout for slow machines
86+
87+
## next version
88+
- added INFOLOGGER_MODE=debug. In this mode, infoLogger library prints on stdout one line per message, with a list of comma-separated field = value pairs. Undefined fields are not shown.

src/InfoLogger.cxx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,8 @@ class InfoLogger::Impl
265265
break;
266266
}
267267
}
268+
} else {
269+
break;
268270
}
269271
if (verbose) {
270272
printf("Output to %s failed\n", getStringFromMode(currentMode.mode));
@@ -302,6 +304,7 @@ class InfoLogger::Impl
302304
file,
303305
infoLoggerD,
304306
raw,
307+
debug,
305308
none };
306309

307310
struct OutputStream {
@@ -332,6 +335,8 @@ class InfoLogger::Impl
332335
out.mode = OutputMode::infoLoggerD;
333336
} else if (!strcmp(s, "raw")) {
334337
out.mode = OutputMode::raw;
338+
} else if (!strcmp(s, "debug")) {
339+
out.mode = OutputMode::debug;
335340
} else if (!strcmp(s, "none")) {
336341
out.mode = OutputMode::none;
337342
} else {
@@ -348,6 +353,10 @@ class InfoLogger::Impl
348353
return "file";
349354
} else if (m == OutputMode::infoLoggerD) {
350355
return "infoLoggerD";
356+
} else if (m == OutputMode::raw) {
357+
return "raw";
358+
} else if (m == OutputMode::debug) {
359+
return "debug";
351360
} else if (m == OutputMode::none) {
352361
return "none";
353362
}
@@ -688,6 +697,12 @@ int InfoLogger::Impl::pushMessage(const InfoLoggerMessageOption& options, const
688697
puts(buffer);
689698
}
690699

700+
// debug output: infoLogger fields one by one
701+
if (currentMode.mode == OutputMode::debug) {
702+
char buffer[LOG_MAX_SIZE];
703+
msgHelper.MessageToText(&msg, buffer, sizeof(buffer), InfoLoggerMessageHelper::Format::Debug);
704+
puts(buffer);
705+
}
691706
return 0;
692707
}
693708

src/InfoLoggerMessageHelper.cxx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
#include <time.h>
1414
#include <sys/time.h>
1515
#include <stdio.h>
16+
#include <string>
1617

1718
#include "InfoLoggerMessageHelper.h"
1819
#include "InfoLogger/InfoLogger.hxx"
@@ -138,6 +139,7 @@ int InfoLoggerMessageHelper::MessageToText(infoLog_msg_t* msg, char* buffer, int
138139
int status;
139140

140141
// todo: escape %... & other printf formats ?
142+
std::string strBuf;
141143

142144
switch (format) {
143145

@@ -240,6 +242,34 @@ int InfoLoggerMessageHelper::MessageToText(infoLog_msg_t* msg, char* buffer, int
240242
}
241243
break;
242244

245+
case InfoLoggerMessageHelper::Format::Debug:
246+
// one line per field, fieldName = value
247+
for (int i = 0; i < protocols[0].numberOfFields; i++) {
248+
if (msg->values[i].isUndefined) {
249+
// strBuf += "(undefined)";
250+
} else {
251+
if (strBuf.length()) {
252+
strBuf += ", ";
253+
}
254+
strBuf += std::string(protocols[0].fields[i].name) + " = ";
255+
switch (protocols[0].fields[i].type) {
256+
case infoLog_msgField_def_t::ILOG_TYPE_STRING:
257+
strBuf += std::string(msg->values[i].value.vString);
258+
break;
259+
case infoLog_msgField_def_t::ILOG_TYPE_INT:
260+
strBuf += std::to_string(msg->values[i].value.vInt);
261+
break;
262+
case infoLog_msgField_def_t::ILOG_TYPE_DOUBLE:
263+
strBuf += std::to_string(msg->values[i].value.vDouble);
264+
break;
265+
default:
266+
break;
267+
}
268+
}
269+
}
270+
appendString(buffer, bufferSize, &ix, strBuf.c_str());
271+
break;
272+
243273
default:
244274
return __LINE__;
245275
}

src/InfoLoggerMessageHelper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ class InfoLoggerMessageHelper
3838
enum Format { Simple,
3939
Detailed,
4040
Full,
41-
Encoded };
41+
Encoded,
42+
Debug };
4243
int MessageToText(infoLog_msg_t* msg, char* buffer, int bufferSize, InfoLoggerMessageHelper::Format format);
4344

4445
// indexes to access a given field in msg struct (protocol independent)

0 commit comments

Comments
 (0)