-
Notifications
You must be signed in to change notification settings - Fork 3
Examples TracePoints
Eduard Mishkurov edited this page Jun 10, 2026
·
3 revisions
This example demonstrates trace points: dormant logging instructions that count calls by default and start producing normal logme output only after they are enabled through runtime control.
The example first executes the code with trace points disabled, prints the collected counters, enables all trace points with trace enable *:*:*, executes the same workload again, and then disables them.
2026-06-10 14:51:46:538 main(): Trace Points example
2026-06-10 14:51:46:538 PrintControlResult(): control> trace list *:*:*
2026-06-10 14:51:46:538 PrintControlResult(): off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=2
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=6
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=6
off C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:27 hits=1
2026-06-10 14:51:46:538 PrintControlResult(): control> trace enable *:*:*
2026-06-10 14:51:46:538 PrintControlResult(): ok: 4 enabled
2026-06-10 14:51:46:538 TracePoints.cpp(27): RunWorkload(): RunWorkload entered
2026-06-10 14:51:46:538 TracePoints.cpp(31): RunWorkload(): loop iteration: i=0
2026-06-10 14:51:46:538 TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=0
2026-06-10 14:51:46:538 W TracePoints.cpp(19): ProcessItem(): rare branch: value=0
2026-06-10 14:51:46:538 TracePoints.cpp(31): RunWorkload(): loop iteration: i=1
2026-06-10 14:51:46:538 TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=1
2026-06-10 14:51:46:538 TracePoints.cpp(31): RunWorkload(): loop iteration: i=2
2026-06-10 14:51:46:538 TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=2
2026-06-10 14:51:46:538 TracePoints.cpp(31): RunWorkload(): loop iteration: i=3
2026-06-10 14:51:46:538 TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=3
2026-06-10 14:51:46:538 W TracePoints.cpp(19): ProcessItem(): rare branch: value=3
2026-06-10 14:51:46:538 TracePoints.cpp(31): RunWorkload(): loop iteration: i=4
2026-06-10 14:51:46:538 TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=4
2026-06-10 14:51:46:538 TracePoints.cpp(31): RunWorkload(): loop iteration: i=5
2026-06-10 14:51:46:538 TracePoints.cpp(15): ProcessItem(): ProcessItem entered: value=5
2026-06-10 14:51:46:538 PrintControlResult(): control> trace stat *:*:*
2026-06-10 14:51:46:538 PrintControlResult(): on C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:19 hits=4
on C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:ProcessItem:15 hits=12
on C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:31 hits=12
on C:\Users\TRITON 17X\AppData\Local\Temp\logme_examples_1cmcawps\logme\examples\TracePoints\TracePoints.cpp:RunWorkload:27 hits=2
... output truncated, 7 lines omitted ...
Repository folder: examples/TracePoints
#include <Logme/ArgumentList.h>
#include <Logme/Logme.h>
using namespace Logme;
static ChannelPtr EnsureVisibleChannel(const ID& id)
{
auto ch = Logme::Instance->CreateChannel(id);
ch->AddLink(::CH);
return ch;
}
static int ProcessItem(int value)
{
LogmeTPt("ProcessItem entered: %s", ARGS1(value));
if ((value % 3) == 0)
{
LogmeW_TPt("rare branch: %s", ARGS1(value));
}
return value * 2;
}
static void RunWorkload(const ChannelPtr& ch)
{
LogmeTPt(ch, "RunWorkload entered");
for (int i = 0; i < 6; ++i)
{
LogmeTPt(ch, "loop iteration: %s", ARGS1(i));
ProcessItem(i);
}
}
static void PrintControlResult(const char* command)
{
LogmeI("control> %s", command);
LogmeI("%s", Logme::Instance->Control(command).c_str());
}
int main()
{
auto ch = EnsureVisibleChannel(ID{ "examples_trace" });
LogmeI(ch, "Trace Points example");
RunWorkload(ch);
PrintControlResult("trace list *:*:*");
PrintControlResult("trace enable *:*:*");
RunWorkload(ch);
PrintControlResult("trace stat *:*:*");
PrintControlResult("trace disable *:*:*");
RunWorkload(ch);
PrintControlResult("trace stat *:*:*");
return 0;
}Previous: ThreadContext | Next: TypicalUsage examples
logme — flexible runtime logging system
Home · Getting Started · Architecture · Output · Backends · Configuration
GitHub: https://github.com/efmsoft/logme
- Home
- Getting Started
- Why logme?
- Core Concepts
- Logging Macros
- Fatal Handling
- Crash Logging
- glog Compatibility
- C API
- Choosing Logging Macros
- Function tracing
- Trace Points
- Override Scopes
- Advanced Features
- Collapse Logging
- Feature Map
- Overview
- Console Backend
- Debugger Backend
- File Backend
- File Rotation & Retention
- Buffer Backend
- Ring Buffer Backend
- SharedFile Backend
- Callback Backend
- Windows Event Log Backend
- Custom Backends
- Runtime Control
- Configuration
- Configuration JSON
- Control Server
- Environment Control
- Control Policies
- Trace Points
- Message Filtering