@@ -44,6 +44,15 @@ BITMASK_ENUM(EventFlags);
4444
4545static constexpr unsigned defaultEventFlags = ERFthreadid;
4646
47+ inline void TRACEEVENT (char const * format, ...) __attribute__((format(printf, 1 , 2 )));
48+ inline void TRACEEVENT (char const * format, ...)
49+ {
50+ va_list args;
51+ va_start (args, format);
52+ VALOG (MCmonitorEvent, format, args);
53+ va_end (args);
54+ }
55+
4756// ---------------------------------------------------------------------------------------------------------------------
4857//
4958// Meta information about events and attributes.
@@ -241,9 +250,15 @@ void EventRecorder::startRecording(const char * optionsText, const char * filena
241250 options = (options & ~ERFthreadid) | (valueBool ? ERFthreadid : ERFnone);
242251 else if (strieq (option, " stack" ))
243252 options = (options & ~ERFstacktrace) | (valueBool ? ERFstacktrace : ERFnone);
253+ else if (strieq (option, " all" ))
254+ options = (valueBool ? ~ERFnone : ERFnone);
255+ else if (strieq (option, " log" ))
256+ outputToLog = valueBool;
244257 };
245258
246259 options = defaultEventFlags;
260+ outputToLog = false ;
261+
247262 processOptionString (optionsText, processOption);
248263 sizeMessageHeaderFooter = sizeof (EventType) + sizeof (__uint64) + sizeof (EventAttr); // event type, timestamp and end of attributes marker
249264 if (options & ERFthreadid)
@@ -374,6 +389,9 @@ void EventRecorder::recordIndexLookup(unsigned fileid, offset_t offset, byte nod
374389 if (!isActive ())
375390 return ;
376391
392+ if (unlikely (outputToLog))
393+ TRACEEVENT (" { \" name\" : \" IndexLookup\" , \" file\" : %u, \" offset\" =0x%llx, \" kind\" : %d, \" hit\" : %s }" , fileid, offset, nodeKind, boolToStr (hit));
394+
377395 size32_t requiredSize = sizeMessageHeaderFooter + getSizeOfAttrs (fileid, offset, nodeKind, hit);
378396 offset_type writeOffset = reserveEvent (requiredSize);
379397 offset_type pos = writeOffset;
@@ -390,6 +408,9 @@ void EventRecorder::recordIndexLoad(unsigned fileid, offset_t offset, byte nodeK
390408 if (!isActive ())
391409 return ;
392410
411+ if (unlikely (outputToLog))
412+ TRACEEVENT (" { \" name\" : \" IndexLoad\" , \" file\" : %u, \" offset\" =0x%llx, \" kind\" : %d, \" size\" : %u, \" elapsed\" : %llu, \" read\" : %llu }" , fileid, offset, nodeKind, size, elapsedTime, readTime);
413+
393414 size32_t requiredSize = sizeMessageHeaderFooter + getSizeOfAttrs (fileid, offset, nodeKind, size, elapsedTime, readTime);
394415 offset_type writeOffset = reserveEvent (requiredSize);
395416 offset_type pos = writeOffset;
@@ -408,6 +429,9 @@ void EventRecorder::recordIndexEviction(unsigned fileid, offset_t offset, byte n
408429 if (!isActive ())
409430 return ;
410431
432+ if (unlikely (outputToLog))
433+ TRACEEVENT (" { \" name\" : \" IndexEviction\" , \" file\" : %u, \" offset\" =0x%llx, \" kind\" : %d, \" size\" : %u }" , fileid, offset, nodeKind, size);
434+
411435 size32_t requiredSize = sizeMessageHeaderFooter + getSizeOfAttrs (fileid, offset, nodeKind, size);
412436 offset_type writeOffset = reserveEvent (requiredSize);
413437 offset_type pos = writeOffset;
0 commit comments