92typedef struct LogDeferData LogDeferData;
121 _In_opt_ strref msg, uint32 batchid, _In_opt_
void* userdata);
158 _In_opt_
void* userdata);
235#define logStr(level, str) _logStr_##level(LOG_##level, LogDefault, str)
247#define logStrC(level, cat, str) _logStr_##level(LOG_##level, cat, str)
260#define logFmt(level, fmt, ...) \
261 _logFmt_##level(LOG_##level, \
264 count_macro_args(__VA_ARGS__), \
265 ((stvar[]) { __VA_ARGS__ }))
278#define logFmtC(level, cat, fmt, ...) \
279 _logFmt_##level(LOG_##level, \
282 count_macro_args(__VA_ARGS__), \
283 ((stvar[]) { __VA_ARGS__ }))
288void _logStr(
int level, int64 timestamp, _In_
LogCategory* cat, _In_ strref str);
289void _logFmt(
int level, int64 timestamp, _In_
LogCategory* cat, _In_ strref fmtstr,
int n,
294#define _logStr_Trace(level, cat, str) _logStr(level, -1, cat, str)
295#define _logFmt_Trace(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
297#define _logStr_Trace(level, cat, str) ((void)0)
298#define _logFmt_Trace(level, cat, fmt, nargs, args) ((void)0)
302#define _logStr_Debug(level, cat, str) _logStr(level, -1, cat, str)
303#define _logFmt_Debug(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
304#define _logStr_DevDiag(level, cat, str) _logStr(LOG_Diag, -1, cat, str)
305#define _logFmt_DevDiag(level, cat, fmt, nargs, args) _logFmt(LOG_Diag, -1, cat, fmt, nargs, args)
306#define _logStr_DevVerbose(level, cat, str) _logStr(LOG_Verbose, -1, cat, str)
307#define _logFmt_DevVerbose(level, cat, fmt, nargs, args) \
308 _logFmt(LOG_Verbose, -1, cat, fmt, nargs, args)
309#define _logStr_DevInfo(level, cat, str) _logStr(LOG_Info, -1, cat, str)
310#define _logFmt_DevInfo(level, cat, fmt, nargs, args) _logFmt(LOG_Info, -1, cat, fmt, nargs, args)
311#define _logStr_DevNotice(level, cat, str) _logStr(LOG_Notice, -1, cat, str)
312#define _logFmt_DevNotice(level, cat, fmt, nargs, args) \
313 _logFmt(LOG_Notice, -1, cat, fmt, nargs, args)
314#define _logStr_DevWarn(level, cat, str) _logStr(LOG_Warn, -1, cat, str)
315#define _logFmt_DevWarn(level, cat, fmt, nargs, args) _logFmt(LOG_Warn, -1, cat, fmt, nargs, args)
316#define _logStr_DevError(level, cat, str) _logStr(LOG_Error, -1, cat, str)
317#define _logFmt_DevError(level, cat, fmt, nargs, args) _logFmt(LOG_Error, -1, cat, fmt, nargs, args)
319#define _logStr_Debug(level, cat, str) ((void)0)
320#define _logFmt_Debug(level, cat, str) ((void)0)
321#define _logStr_DevDiag(level, cat, str) ((void)0)
322#define _logFmt_DevDiag(level, cat, str) ((void)0)
323#define _logStr_DevVerbose(level, cat, str) ((void)0)
324#define _logFmt_DevVerbose(level, cat, str) ((void)0)
325#define _logStr_DevInfo(level, cat, str) ((void)0)
326#define _logFmt_DevInfo(level, cat, str) ((void)0)
327#define _logStr_DevNotice(level, cat, str) ((void)0)
328#define _logFmt_DevNotice(level, cat, str) ((void)0)
329#define _logStr_DevWarn(level, cat, str) ((void)0)
330#define _logFmt_DevWarn(level, cat, str) ((void)0)
331#define _logStr_DevError(level, cat, str) ((void)0)
332#define _logFmt_DevError(level, cat, str) ((void)0)
335#define _logStr_Diag(level, cat, str) _logStr(level, -1, cat, str)
336#define _logFmt_Diag(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
337#define _logStr_Verbose(level, cat, str) _logStr(level, -1, cat, str)
338#define _logFmt_Verbose(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
339#define _logStr_Info(level, cat, str) _logStr(level, -1, cat, str)
340#define _logFmt_Info(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
341#define _logStr_Notice(level, cat, str) _logStr(level, -1, cat, str)
342#define _logFmt_Notice(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
343#define _logStr_Warn(level, cat, str) _logStr(level, -1, cat, str)
344#define _logFmt_Warn(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
345#define _logStr_Error(level, cat, str) _logStr(level, -1, cat, str)
346#define _logFmt_Error(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
347#define _logStr_Fatal(level, cat, str) _logStr(level, -1, cat, str)
348#define _logFmt_Fatal(level, cat, fmt, nargs, args) _logFmt(level, -1, cat, fmt, nargs, args)
bool logUnregisterDest(LogDest *dhandle)
LogCategory * LogDefault
Default log category used when no category is specified.
LogCategory * logCreateCat(strref name, bool priv)
strref LogLevelNames[]
Array of log level names as strings (e.g., "Fatal", "Error", etc.)
LogDest * logRegisterDest(int maxlevel, LogCategory *catfilter, LogDestMsg msgfunc, LogDestBatchDone batchfunc, LogDestClose closefunc, void *userdata)
struct LogDest LogDest
Opaque handle to a registered log destination.
strref LogLevelAbbrev[]
Array of single-character log level abbreviations (e.g., "F", "E", etc.)
void(* LogDestMsg)(int level, LogCategory *cat, int64 timestamp, strref msg, uint32 batchid, void *userdata)
void(* LogDestBatchDone)(uint32 batchid, void *userdata)
void(* LogDestClose)(void *userdata)
@ LOG_Notice
Normal but significant conditions.
@ LOG_Debug
Debug messages (compiled out of non-development builds)
@ LOG_Trace
Detailed trace messages (only available in debug builds)
@ LOG_Fatal
Fatal errors, application cannot continue.
@ LOG_Verbose
Detailed informational messages.
@ LOG_Info
Informational messages.
@ LOG_Error
Non-fatal errors requiring attention.
@ LOG_Warn
Warning conditions that may indicate problems.
@ LOG_Diag
Release build diagnostics not normally needed.
#define stvar(typen, val)
Core string types and fundamental operations.
bool priv
Private categories are filtered out unless explicitly requested.
string name
Category name.
Variant type containers and type-safe variadic argument support.