13#include <mach/mach_time.h>
15#include <mach/clock.h>
26 class CommandLineLogger;
27 class ChromeTraceFileLogger;
39#define logDebug(methodName, logMacroMessageStream) \
41 auto logMacroMessage = [&](void) -> std::string { \
42 std::ostringstream conv; \
43 conv << logMacroMessageStream; \
44 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
47 _log.debug (methodName, logMacroMessage); \
50#define logDebug(methodName, logMacroMessageStream)
54#define logTraceIn(methodName) \
56 auto logMacroMessage = [&](void) -> std::string { \
57 std::ostringstream conv; \
58 conv << "in (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
61 _log.traceIn(methodName, logMacroMessage); \
62 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
65#define logTraceInWith1Argument(methodName,argument0) \
67 auto logMacroMessage = [&](void) -> std::string { \
68 std::ostringstream conv; \
69 conv << "in:" << #argument0 << ":" << argument0; \
70 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
73 _log.traceIn (methodName, logMacroMessage); \
74 _log.indent(true, _log.getTraceInformation(methodName), logMacroMessage); \
77#define logTraceInWith2Arguments(methodName,argument0,argument1) \
79 auto logMacroMessage = [&](void) -> std::string { \
80 std::ostringstream conv; \
81 conv << "in:" << #argument0 << ":" << argument0; \
82 conv << "," << #argument1 << ":" << argument1; \
83 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
86 _log.traceIn (methodName, logMacroMessage); \
87 _log.indent(true, _log.getTraceInformation(methodName), logMacroMessage); \
90#define logTraceInWith3Arguments(methodName,argument0,argument1,argument2) \
92 auto logMacroMessage = [&](void) -> std::string { \
93 std::ostringstream conv; \
94 conv << "in:" << #argument0 << ":" << argument0; \
95 conv << "," << #argument1 << ":" << argument1; \
96 conv << "," << #argument2 << ":" << argument2; \
97 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
100 _log.traceIn (methodName, logMacroMessage); \
101 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
104#define logTraceInWith4Arguments(methodName,argument0,argument1,argument2,argument3) \
106 auto logMacroMessage = [&](void) -> std::string { \
107 std::ostringstream conv; \
108 conv << "in:" << #argument0 << ":" << argument0; \
109 conv << "," << #argument1 << ":" << argument1; \
110 conv << "," << #argument2 << ":" << argument2; \
111 conv << "," << #argument3 << ":" << argument3; \
112 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
115 _log.traceIn (methodName, logMacroMessage); \
116 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
119#define logTraceInWith5Arguments(methodName,argument0,argument1,argument2,argument3,argument4) \
121 auto logMacroMessage = [&](void) -> std::string { \
122 std::ostringstream conv; \
123 conv << "in:" << #argument0 << ":" << argument0; \
124 conv << "," << #argument1 << ":" << argument1; \
125 conv << "," << #argument2 << ":" << argument2; \
126 conv << "," << #argument3 << ":" << argument3; \
127 conv << "," << #argument4 << ":" << argument4; \
128 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
131 _log.traceIn (methodName, logMacroMessage); \
132 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
135#define logTraceInWith6Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5) \
137 auto logMacroMessage = [&](void) -> std::string { \
138 std::ostringstream conv; \
139 conv << "in:" << #argument0 << ":" << argument0; \
140 conv << "," << #argument1 << ":" << argument1; \
141 conv << "," << #argument2 << ":" << argument2; \
142 conv << "," << #argument3 << ":" << argument3; \
143 conv << "," << #argument4 << ":" << argument4; \
144 conv << "," << #argument5 << ":" << argument5; \
145 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
148 _log.traceIn (methodName, logMacroMessage); \
149 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
152#define logTraceInWith7Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6) \
154 auto logMacroMessage = [&](void) -> std::string { \
155 std::ostringstream conv; \
156 conv << "in:" << #argument0 << ":" << argument0; \
157 conv << "," << #argument1 << ":" << argument1; \
158 conv << "," << #argument2 << ":" << argument2; \
159 conv << "," << #argument3 << ":" << argument3; \
160 conv << "," << #argument4 << ":" << argument4; \
161 conv << "," << #argument5 << ":" << argument5; \
162 conv << "," << #argument6 << ":" << argument6; \
163 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
166 _log.traceIn (methodName, logMacroMessage); \
167 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
170#define logTraceInWith8Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7) \
172 auto logMacroMessage = [&](void) -> std::string { \
173 std::ostringstream conv; \
174 conv << "in:" << #argument0 << ":" << argument0; \
175 conv << "," << #argument1 << ":" << argument1; \
176 conv << "," << #argument2 << ":" << argument2; \
177 conv << "," << #argument3 << ":" << argument3; \
178 conv << "," << #argument4 << ":" << argument4; \
179 conv << "," << #argument5 << ":" << argument5; \
180 conv << "," << #argument6 << ":" << argument6; \
181 conv << "," << #argument7 << ":" << argument7; \
182 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
185 _log.traceIn (methodName, logMacroMessage); \
186 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
189#define logTraceInWith9Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7,argument8) \
191 auto logMacroMessage = [&](void) -> std::string { \
192 std::ostringstream conv; \
193 conv << "in:" << #argument0 << ":" << argument0; \
194 conv << "," << #argument1 << ":" << argument1; \
195 conv << "," << #argument2 << ":" << argument2; \
196 conv << "," << #argument3 << ":" << argument3; \
197 conv << "," << #argument4 << ":" << argument4; \
198 conv << "," << #argument5 << ":" << argument5; \
199 conv << "," << #argument6 << ":" << argument6; \
200 conv << "," << #argument7 << ":" << argument7; \
201 conv << "," << #argument8 << ":" << argument8; \
202 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
205 _log.traceIn (methodName, logMacroMessage); \
206 _log.indent(true,_log.getTraceInformation(methodName), logMacroMessage); \
209#define logTraceOut(methodName) \
211 auto logMacroMessage = [&](void) -> std::string { \
212 std::ostringstream conv; \
213 conv << "out (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
216 _log.indent(false,_log.getTraceInformation(methodName),logMacroMessage); \
217 _log.traceOut (methodName, logMacroMessage); \
220#define logTraceOutWith1Argument(methodName,argument0) \
222 auto logMacroMessage = [&](void) -> std::string { \
223 std::ostringstream conv; \
224 conv << "out:" << #argument0 << ":" << argument0; \
225 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
228 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
229 _log.traceOut (methodName, logMacroMessage); \
232#define logTraceOutWith2Arguments(methodName,argument0,argument1) \
234 auto logMacroMessage = [&](void) -> std::string { \
235 std::ostringstream conv; \
236 conv << "out:" << #argument0 << ":" << argument0; \
237 conv << "," << #argument1 << ":" << argument1; \
238 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
241 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
242 _log.traceOut (methodName, logMacroMessage); \
245#define logTraceOutWith3Arguments(methodName,argument0,argument1,argument2) \
247 auto logMacroMessage = [&](void) -> std::string { \
248 std::ostringstream conv; \
249 conv << "out:" << #argument0 << ":" << argument0; \
250 conv << "," << #argument1 << ":" << argument1; \
251 conv << "," << #argument2 << ":" << argument2; \
252 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
255 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
256 _log.traceOut (methodName, logMacroMessage); \
259#define logTraceOutWith4Arguments(methodName,argument0,argument1,argument2,argument3) \
261 auto logMacroMessage = [&](void) -> std::string { \
262 std::ostringstream conv; \
263 conv << "out:" << #argument0 << ":" << argument0; \
264 conv << "," << #argument1 << ":" << argument1; \
265 conv << "," << #argument2 << ":" << argument2; \
266 conv << "," << #argument3 << ":" << argument3; \
267 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
270 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
271 _log.traceOut (methodName, logMacroMessage); \
274#define logTraceOutWith5Arguments(methodName,argument0,argument1,argument2,argument3,argument4) \
276 auto logMacroMessage = [&](void) -> std::string { \
277 std::ostringstream conv; \
278 conv << "out:" << #argument0 << ":" << argument0; \
279 conv << "," << #argument1 << ":" << argument1; \
280 conv << "," << #argument2 << ":" << argument2; \
281 conv << "," << #argument3 << ":" << argument3; \
282 conv << "," << #argument4 << ":" << argument4; \
283 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
286 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
287 _log.traceOut (methodName, logMacroMessage); \
290#define logTraceOutWith6Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5) \
292 auto logMacroMessage = [&](void) -> std::string { \
293 std::ostringstream conv; \
294 conv << "out:" << #argument0 << ":" << argument0; \
295 conv << "," << #argument1 << ":" << argument1; \
296 conv << "," << #argument2 << ":" << argument2; \
297 conv << "," << #argument3 << ":" << argument3; \
298 conv << "," << #argument4 << ":" << argument4; \
299 conv << "," << #argument5 << ":" << argument5; \
300 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
303 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
304 _log.traceOut (methodName, logMacroMessage); \
307#define logTraceOutWith7Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6) \
309 auto logMacroMessage = [&](void) -> std::string { \
310 std::ostringstream conv; \
311 conv << "out:" << #argument0 << ":" << argument0; \
312 conv << "," << #argument1 << ":" << argument1; \
313 conv << "," << #argument2 << ":" << argument2; \
314 conv << "," << #argument3 << ":" << argument3; \
315 conv << "," << #argument4 << ":" << argument4; \
316 conv << "," << #argument5 << ":" << argument5; \
317 conv << "," << #argument6 << ":" << argument6; \
318 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
321 _log.indent(false,_log.getTraceInformation(methodName), logMacroMessage); \
322 _log.traceOut (methodName, logMacroMessage); \
326#define logTraceOutWith8Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7) \
328 auto logMacroMessage = [&](void) -> std::string { \
329 std::ostringstream conv; \
330 conv << "out:" << #argument0 << ":" << argument0; \
331 conv << "," << #argument1 << ":" << argument1; \
332 conv << "," << #argument2 << ":" << argument2; \
333 conv << "," << #argument3 << ":" << argument3; \
334 conv << "," << #argument4 << ":" << argument4; \
335 conv << "," << #argument5 << ":" << argument5; \
336 conv << "," << #argument6 << ":" << argument6; \
337 conv << "," << #argument7 << ":" << argument7; \
338 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
341 _log.indent(false,_log.getTraceInformation(methodName),logMacroMessage); \
342 _log.traceOut (methodName, logMacroMessage); \
345#define logTraceOutWith12Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7,argument8,argument9,argument10,argument11) \
347 auto logMacroMessage = [&](void) -> std::string { \
348 std::ostringstream conv; \
349 conv << "out:" << #argument0 << ":" << argument0; \
350 conv << "," << #argument1 << ":" << argument1; \
351 conv << "," << #argument2 << ":" << argument2; \
352 conv << "," << #argument3 << ":" << argument3; \
353 conv << "," << #argument4 << ":" << argument4; \
354 conv << "," << #argument5 << ":" << argument5; \
355 conv << "," << #argument6 << ":" << argument6; \
356 conv << "," << #argument7 << ":" << argument7; \
357 conv << "," << #argument8 << ":" << argument8; \
358 conv << "," << #argument9 << ":" << argument9; \
359 conv << "," << #argument10 << ":" << argument10; \
360 conv << "," << #argument11 << ":" << argument11; \
361 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
364 _log.indent(false,_log.getTraceInformation(methodName),logMacroMessage); \
365 _log.traceOut (methodName, logMacroMessage); \
369#define logTraceIn(methodName)
370#define logTraceInWith1Argument(methodName,argument0)
371#define logTraceInWith2Arguments(methodName,argument0,argument1)
372#define logTraceInWith3Arguments(methodName,argument0,argument1,argument2)
373#define logTraceInWith4Arguments(methodName,argument0,argument1,argument2,argument3)
374#define logTraceInWith5Arguments(methodName,argument0,argument1,argument2,argument3,argument4)
375#define logTraceInWith6Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5)
376#define logTraceInWith7Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6)
377#define logTraceInWith8Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7)
378#define logTraceInWith9Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7,argument8)
379#define logTraceOut(methodName)
380#define logTraceOutWith1Argument(methodName,argument0)
381#define logTraceOutWith2Arguments(methodName,argument0,argument1)
382#define logTraceOutWith3Arguments(methodName,argument0,argument1,argument2)
383#define logTraceOutWith4Arguments(methodName,argument0,argument1,argument2,argument3)
384#define logTraceOutWith5Arguments(methodName,argument0,argument1,argument2,argument3,argument4)
385#define logTraceOutWith6Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5)
386#define logTraceOutWith7Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6)
387#define logTraceOutWith8Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7)
388#define logTraceOutWith12Arguments(methodName,argument0,argument1,argument2,argument3,argument4,argument5,argument6,argument7,argument8,argument9,argument10,argument11)
411#define logInfo(methodName, logMacroMessageStream) \
413 auto logMacroMessage = [&](void) -> std::string { \
414 std::ostringstream conv; \
415 conv << logMacroMessageStream; \
418 _log.info (methodName, logMacroMessage); \
421#define logExceptionAndQuit(exception) \
423 std::cerr << std::string("caught exception (file:)") << __FILE__ << std::string(", line:") << __LINE__ << std::string("): ") << std::string(exception.what()); \
440#define logWarning(methodName, logMacroMessageStream) \
442 auto logMacroMessage = [&](void) -> std::string { \
443 std::ostringstream conv; \
444 conv << logMacroMessageStream; \
445 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
448 _log.warning(methodName, logMacroMessage); \
464#define logError(methodName, logMacroMessageStream) \
466 auto logMacroMessage = [&](void) -> std::string { \
467 std::ostringstream conv; \
468 conv << logMacroMessageStream; \
469 conv << " (file:" << __FILE__ << ",line:" << __LINE__ << ")"; \
472 _log.error (methodName, logMacroMessage); \
518 #if !defined(UseLogService)
552 Log(
const std::string& className);
563 static void exception(
const std::bad_alloc&
exception,
const std::string& file,
const int lineNumber );
577 typedef std::function< std::string(
void) >
Message;
598 void debug(
const std::string& methodName,
Message logMacroMessage);
600 inline void debug([[maybe_unused]]
const std::string& methodName, [[maybe_unused]]
Message logMacroMessage)
const {}
618 void info(
const std::string& methodName,
Message logMacroMessage);
635 void warning(
const std::string& methodName,
Message logMacroMessage);
652 void error(
const std::string& methodName,
Message logMacroMessage);
655 void traceIn(
const std::string& methodName,
Message logMacroMessage);
658 void traceIn(
const std::string& methodName,
Message logMacroMessage);
virtual ~Log()
Destructor.
std::chrono::system_clock::time_point _startupTime
void traceIn(const std::string &methodName, Message logMacroMessage)
CommandLineLogger UseLogService
static std::string getMachineInformation()
Writes information about the computer the output is written from.
std::string getTraceInformation(const std::string &methodName) const
long int getTimeStamp() const
Returns the time stamp in nanoseconds.
void error(const std::string &methodName, Message logMacroMessage)
Log an Error.
void debug(const std::string &methodName, Message logMacroMessage) const
Log Debug Information.
Log(const std::string &className)
Constructor.
std::function< std::string(void) > Message
We could make the logMacroMessage passed into a log statement a string.
void info(const std::string &methodName, Message logMacroMessage)
Log Information.
static void flushBeforeAssertion()
void warning(const std::string &methodName, Message logMacroMessage)
Log a Warning.
std::string _className
Name of the class that is using the interface.
void traceOut(const std::string &methodName, Message logMacroMessage)
static void exception(const std::bad_alloc &exception, const std::string &file, const int lineNumber)
Logs and exception and stops the application.
void indent(bool indent, const std::string &trace, Message logMacroMessage) const
Indent the Subsequent Messages.
Have to include this header, as I need access to the SYCL_EXTERNAL keyword.