CX Framework
Cross-platform C utility framework
Loading...
Searching...
No Matches
Memory Buffer Logging

Data Structures

struct  LogMembufData
 

Typedefs

typedef struct LogMembufData LogMembufData
 

Functions

LogMembufDatalogmembufCreate (uint32 size)
 
LogDest * logmembufRegister (int maxlevel, LogCategory *catfilter, LogMembufData *membuf)
 
LogDest * logmembufRegisterWithDefer (int maxlevel, LogCategory *catfilter, LogMembufData *membuf, LogDest *deferdest)
 
void logmembufMsgFunc (int level, LogCategory *cat, int64 timestamp, strref msg, uint32 batchid, void *userdata)
 
void logmembufCloseFunc (void *userdata)
 

Detailed Description

Memory buffer logging destination that writes log messages to a fixed-size circular buffer in memory. Useful for debugging, testing, and capturing logs in memory-constrained environments. When the buffer fills, new messages wrap around and overwrite the oldest entries.

Basic Usage:

// Create 4KB buffer
LogDest *dest = logmembufRegister(LOG_Debug, NULL, lmd);
// Log some messages
logStr(Info, _S"Test message");
// Access the buffer contents directly
printf("Buffered logs:\n%.*s\n", (int)lmd->cur, lmd->buf);
// Cleanup
bool logUnregisterDest(LogDest *dhandle)
struct LogDest LogDest
Opaque handle to a registered log destination.
Definition log.h:87
void logFlush(void)
@ LOG_Debug
Debug messages (compiled out of non-development builds)
Definition log.h:64
#define logStr(level, str)
Definition log.h:235
LogMembufData * logmembufCreate(uint32 size)
LogDest * logmembufRegister(int maxlevel, LogCategory *catfilter, LogMembufData *membuf)
#define _S
Creates a static ASCII string from a string literal.
Definition strbase.h:392
char * buf
Buffer storage.
Definition logmembuf.h:41
uint32 cur
Current write position (number of bytes written)
Definition logmembuf.h:40

Typedef Documentation

◆ LogMembufData

typedef struct LogMembufData LogMembufData

Memory buffer log destination state

Contains the circular buffer and current write position. When cur reaches size, new messages wrap to the beginning. The buffer is null-terminated when possible.

Function Documentation

◆ logmembufCloseFunc()

void logmembufCloseFunc ( void *  userdata)

Cleanup callback for memory buffer destinations

Frees the buffer and releases resources.

Parameters
userdataLogMembufData pointer from logmembufCreate()

◆ logmembufCreate()

LogMembufData * logmembufCreate ( uint32  size)

Create a memory buffer log destination

Allocates a fixed-size circular buffer for log messages. The buffer uses a compact format with timestamps and single-character log levels. Messages longer than the buffer size are truncated.

Parameters
sizeBuffer size in bytes
Returns
Memory buffer handle, or NULL on allocation failure
LogMembufData *lmd = logmembufCreate(8192); // 8KB buffer

◆ logmembufMsgFunc()

void logmembufMsgFunc ( int  level,
LogCategory cat,
int64  timestamp,
strref  msg,
uint32  batchid,
void *  userdata 
)

Log message callback for memory buffer destinations

Formats and writes a log message to the circular buffer. Uses a compact format: "YYYYMMDD HHMMSS L [Category]: Message\n"

Parameters
levelLog severity level
catCategory, or NULL for default
timestampWall clock timestamp
msgLog message text
batchidBatch identifier (unused)
userdataLogMembufData pointer from logmembufCreate()

◆ logmembufRegister()

LogDest * logmembufRegister ( int  maxlevel,
LogCategory catfilter,
LogMembufData membuf 
)

Register a memory buffer destination with the logging system

Registers the memory buffer as a log destination. Messages will be formatted in a compact style and written to the circular buffer. The buffer destination will be automatically cleaned up when unregistered.

Parameters
maxlevelMaximum log level to write to buffer
catfilterCategory filter, or NULL for all non-private categories
membufMemory buffer handle from logmembufCreate()
Returns
Destination handle for later unregistration, or NULL on failure

◆ logmembufRegisterWithDefer()

LogDest * logmembufRegisterWithDefer ( int  maxlevel,
LogCategory catfilter,
LogMembufData membuf,
LogDest *  deferdest 
)

Register a memory buffer destination and flush deferred logs

Atomically registers a memory buffer destination while flushing previously deferred logs to it. Useful for capturing early startup logs in memory before other destinations are available.

Parameters
maxlevelMaximum log level to write to buffer
catfilterCategory filter, or NULL for all non-private categories
membufMemory buffer handle from logmembufCreate()
deferdestDeferred destination to flush (destroyed during this call)
Returns
Destination handle for later unregistration, or NULL on failure
// Early startup - defer logs
LogDeferData *deferdata = logDeferCreate();
LogDest *deferdest = logDeferRegister(LOG_Info, NULL, deferdata);
// Later - create memory buffer and transfer logs
LogDest *dest = logmembufRegisterWithDefer(LOG_Info, NULL, lmd, deferdest);
@ LOG_Info
Informational messages.
Definition log.h:61
LogDest * logDeferRegister(int level, LogCategory *catfilter, LogDeferData *deferdata)
LogDeferData * logDeferCreate(void)
LogDest * logmembufRegisterWithDefer(int maxlevel, LogCategory *catfilter, LogMembufData *membuf, LogDest *deferdest)