Label: logme

logme is a logging library for C/C++ that lets applications control logging behavior at runtime. It allows developers to enable or disable logs, redirect output, and limit log volume without restarting the application.

The library helps build a flexible and scalable logging system. Developers can configure log levels, routing, and formatting through configuration instead of recompiling code. This approach simplifies debugging and improves observability in production environments.

logme also supports early (boot) logging, loading configuration from external sources, and merging early logs into the main logging pipeline. This ensures that the application preserves diagnostic information even during the earliest stages of initialization.

FileBackend in Production: C++ Log Rotation with logme

Writing log messages to a file is easy. Keeping file logging predictable after months of production use is much harder. An active log file must not grow forever. Old logs need to be preserved for a useful period, but they also need to be deleted eventually. Finished files may need compression. At the same time,

Thread-Local Logging Context in C++: Using Thread-Local Context in logme

A useful log should do more than tell you what happened. It should also make it clear which request, connection, client, or background job a message belongs to. When an application is still small, this usually seems easy enough. You can just include the extra data directly in the log call: LogmeI( "Request %s: loading

Log Source Profiling: Which Log Statement Is Responsible?

How log source profiling traces CPU and file I/O back to individual C and C++ call sites without disabling production diagnostics Log source profiling starts where a normal CPU profiler stops. A system profiler can tell you that a logging thread is consuming CPU and show write(), a file-backend worker, queue synchronization, memory copies, and

Migrating from spdlog to logme: From Loggers and Sinks to Channels and Backends

Migrating from spdlog to logme should not be a mechanical replacement of function names. On the surface, both libraries perform similar work: an application calls a logging API, the message gets a severity level, is formatted, and is sent to a file, console, or another output. However, there is little reason to migrate just to