Concord - C Discord API library
A Discord API wrapper library written in C
logmod.h File Reference
#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include <stdlib.h>
#include <stddef.h>
#include <string.h>
#include "logmod.h"
Include dependency graph for logmod.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  logmod_options
 Configuration options for a logger. More...
 
struct  logmod_label
 Label properties for a log level. More...
 
struct  logmod_info
 Information about a log entry. More...
 
struct  logmod_mut_logger
 Mutable version of the logger structure. More...
 
struct  logmod_logger
 Immutable logger structure. More...
 
struct  logmod
 Main logging context structure. More...
 

Macros

#define LOGMOD_API   extern
 Define symbol visibility for LogMod API. More...
 
#define LOGMOD_PRINTF_LIKE(a, b)
 Format string checking attribute for printf-like functions. More...
 
#define LOGMOD_FALLBACK_APPLICATION_ID   "APPLICATION"
 Default application ID for the fallback logger. More...
 
#define LOGMOD_FALLBACK_CONTEXT_ID   "GLOBAL"
 Default context ID for the fallback logger. More...
 
#define LOGMOD_LABEL_COLOR(_style, _visibility, _color)
 Helper macro to define label color, style, and visibility at once. More...
 
#define LOGMOD_STYLE_REGULAR   "0"
 ANSI text style values. More...
 
#define LOGMOD_STYLE_BOLD   "1"
 
#define LOGMOD_STYLE_UNDERLINE   "4"
 
#define LOGMOD_STYLE_STRIKETHROUGH   "9"
 
#define LOGMOD_VISIBILITY_FOREGROUND   "3"
 ANSI text visibility mode values. More...
 
#define LOGMOD_VISIBILITY_BACKGROUND   "4"
 
#define LOGMOD_VISIBILITY_INTENSITY   "9"
 
#define LOGMOD_VISIBILITY_BACKGROUND_INTENSITY    "10"
 
#define LOGMOD_COLOR_BLACK   "0"
 ANSI color values. More...
 
#define LOGMOD_COLOR_RED   "1"
 
#define LOGMOD_COLOR_GREEN   "2"
 
#define LOGMOD_COLOR_YELLOW   "3"
 
#define LOGMOD_COLOR_BLUE   "4"
 
#define LOGMOD_COLOR_MAGENTA   "5"
 
#define LOGMOD_COLOR_CYAN   "6"
 
#define LOGMOD_COLOR_WHITE   "7"
 
#define __LOGMOD_LOGGER_ATTRS(_qualifier)
 Internal macro for defining logger attributes. More...
 
#define __BLANK
 
#define logmod_nlog(_level, _logger, _parenthesized_params, num_params)
 Log a message (C89 compatible version) More...
 
#define logmod_log   logmod_nlog
 Alias to logmod_nlog for C89 compatibility. More...
 
#define LOGMOD_ENCODE(_style, _visibility, _color, buf)    "\x1b[" _style ";" _visibility _color "m" buf "\x1b[0m"
 Encodes text with ANSI colors and styles. More...
 
#define LOGMOD_ENCODE_STATIC(_style, _visibility, _color, buf)
 Static encoding of text with ANSI colors (compile-time) More...
 
#define LOGMOD_ENCODE_TOGGLE(_toggle, _style, _visibility, _color, buf)    ((_toggle) ? LOGMOD_ENCODE_STATIC(_style, _visibility, _color, buf) : buf)
 Dynamic encoding of text with ANSI colors (respects toggle) More...
 
#define LOGMOD_ENCODE_LOGGER(_logger, _style, _visibility, _color, buf)
 Dynamic encoding of text with ANSI colors (respects logger color setting) More...
 
#define LMS   LOGMOD_ENCODE_STATIC
 Shorthand for LOGMOD_ENCODE_STATIC. More...
 
#define LMT   LOGMOD_ENCODE_TOGGLE
 Shorthand for LOGMOD_ENCODE_TOGGLE. More...
 
#define LML   LOGMOD_ENCODE_LOGGER
 Shorthand for LOGMOD_ENCODE_LOGGER. More...
 
#define LME   LOGMOD_ENCODE
 Shorthand for LOGMOD_ENCODE. More...
 
#define LOGMOD_SPREAD_TUPLE_0(_fmt)   _fmt
 
#define LOGMOD_SPREAD_TUPLE_1(_fmt, _1)   _fmt, _1
 
#define LOGMOD_SPREAD_TUPLE_2(_fmt, _1, _2)   _fmt, _1, _2
 
#define LOGMOD_SPREAD_TUPLE_3(_fmt, _1, _2, _3)   _fmt, _1, _2, _3
 
#define LOGMOD_SPREAD_TUPLE_4(_fmt, _1, _2, _3, _4)   _fmt, _2, _3, _4
 
#define LOGMOD_SPREAD_TUPLE_5(_fmt, _1, _2, _3, _4, _5)    _fmt, _1, _2, _3, _4, _5
 
#define LOGMOD_SPREAD_TUPLE_6(_fmt, _1, _2, _3, _4, _5, _6)    _fmt, _1, _2, _3, _4, _6
 
#define LOGMOD_SPREAD_TUPLE_7(_fmt, _1, _2, _3, _4, _5, _6, _7)    _fmt, _1, _2, _3, _4, _5, _6, _7
 
#define LOGMOD_SPREAD_TUPLE_8(_fmt, _1, _2, _3, _4, _5, _6, _7, _8)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8
 
#define LOGMOD_SPREAD_TUPLE_9(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9
 
#define LOGMOD_SPREAD_TUPLE_10(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10
 
#define LOGMOD_SPREAD_TUPLE_11(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11
 
#define LOGMOD_SPREAD_TUPLE_12(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12
 
#define LOGMOD_SPREAD_TUPLE_13(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13
 
#define LOGMOD_SPREAD_TUPLE_14(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14
 
#define LOGMOD_SPREAD_TUPLE_15(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15
 
#define LOGMOD_SPREAD_TUPLE_16(_fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16)    _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16
 
#define LOGMOD_FROM_LOGGER(_ctx)
 Get logmod from any logmod_logger. More...
 
#define _LOGMOD_EXPECT(_cond, _error, _return)
 
#define LOGMOD_EXPECT(_cond, _error)   _LOGMOD_EXPECT(_cond, _error, _error)
 Check if a condition is met and log an error message if not. More...
 

Typedefs

typedef void(* logmod_lock) (const struct logmod_logger *logger, int should_lock)
 Lock function type for thread safety. More...
 
typedef logmod_err(* logmod_callback) (const struct logmod_logger *logger, const struct logmod_info *info, const char *fmt, va_list args)
 Callback function type for custom log handling. More...
 

Enumerations

enum  logmod_levels {
  LOGMOD_LEVEL_TRACE = 0 , LOGMOD_LEVEL_DEBUG , LOGMOD_LEVEL_INFO , LOGMOD_LEVEL_WARN ,
  LOGMOD_LEVEL_ERROR , LOGMOD_LEVEL_FATAL , __LOGMOD_LEVEL_MAX , LOGMOD_LEVEL_CUSTOM = __LOGMOD_LEVEL_MAX
}
 Log levels supported by LogMod. More...
 
enum  logmod_err {
  LOGMOD_ERRNO = -2 , LOGMOD_BAD_PARAMETER = -1 , LOGMOD_OK = 0 , LOGMOD_OK_CONTINUE ,
  LOGMOD_OK_SKIPPED
}
 Error codes returned by LogMod functions. More...
 

Functions

logmod_err logmod_init (struct logmod *logmod, const char *const application_id, struct logmod_logger table[], unsigned length)
 Initialize the logging context. More...
 
logmod_err logmod_cleanup (struct logmod *logmod)
 Clean up the logging context. More...
 
logmod_err logmod_set_lock (struct logmod *logmod, logmod_lock lock)
 Set the lock function for thread safety. More...
 
logmod_err logmod_set_options (struct logmod *logmod, struct logmod_options options)
 Set default options for all new loggers. More...
 
logmod_err logmod_toggle_logger (struct logmod *logmod, const char *const context_id)
 Toggle a specific logger from logging (default is true) More...
 
logmod_err logmod_logger_set_data (struct logmod_logger *logger, void *user_data)
 Set user data for a logger. More...
 
logmod_err logmod_logger_set_callback (struct logmod_logger *logger, const struct logmod_label *const custom_labels, const size_t num_custom_labels, logmod_callback callback)
 Set callback function and custom labels for a logger. More...
 
logmod_err logmod_logger_set_options (struct logmod_logger *logger, struct logmod_options options)
 Set all options for a logger at once. More...
 
logmod_err logmod_logger_set_id_visibility (struct logmod_logger *logger, int show_app_id, int show_context_id)
 Set visibility of application ID and context ID in log messages. More...
 
logmod_err logmod_logger_set_quiet (struct logmod_logger *logger, int quiet)
 Set quiet mode for a logger. More...
 
logmod_err logmod_logger_set_color (struct logmod_logger *logger, int color)
 Set color mode for a logger. More...
 
logmod_err logmod_logger_set_level (struct logmod_logger *logger, unsigned level)
 Set minimum log level for a logger. More...
 
logmod_err logmod_logger_set_logfile (struct logmod_logger *logger, FILE *logfile)
 Set logfile for a logger. More...
 
logmod_err logmod_logger_set_time (struct logmod_logger *logger, int show_time)
 Set time display for a logger. More...
 
logmod_err logmod_logger_set_counter (struct logmod_logger *logger, int show_counter)
 Set counter display for a logger. More...
 
struct logmod_loggerlogmod_get_logger (struct logmod *logmod, const char *const context_id)
 Get or create a logger by context ID. More...
 
const struct logmod_labellogmod_logger_get_label (const struct logmod_logger *logger, const unsigned level)
 Get the label for a specific log level. More...
 
long logmod_logger_get_level (const struct logmod_logger *logger, const char *const label)
 Get the level value for a label name. More...
 
long logmod_logger_get_counter (const struct logmod_logger *logger)
 Get the global message counter for a logger. More...
 
logmod_err _logmod_log (const struct logmod_logger *logger, const unsigned line, const char *const filename, const unsigned level, const char *fmt,...)
 Internal logging implementation function. More...
 

Macro Definition Documentation

◆ LOGMOD_API

#define LOGMOD_API   extern

Define symbol visibility for LogMod API.

Define LOGMOD_STATIC to make all symbols static (for single-file inclusion)

◆ LOGMOD_PRINTF_LIKE

#define LOGMOD_PRINTF_LIKE (   a,
 
)

Format string checking attribute for printf-like functions.

This macro adds format string checking when supported by the compiler, helping catch format string errors at compile time.

Parameters
aFormat string parameter position
bFirst variadic argument position

◆ LOGMOD_FALLBACK_APPLICATION_ID

#define LOGMOD_FALLBACK_APPLICATION_ID   "APPLICATION"

Default application ID for the fallback logger.

Can be overridden by defining this macro before including logmod.h

◆ LOGMOD_FALLBACK_CONTEXT_ID

#define LOGMOD_FALLBACK_CONTEXT_ID   "GLOBAL"

Default context ID for the fallback logger.

Can be overridden by defining this macro before including logmod.h

◆ LOGMOD_LABEL_COLOR

#define LOGMOD_LABEL_COLOR (   _style,
  _visibility,
  _color 
)
Value:
LOGMOD_STYLE_##_style, LOGMOD_VISIBILITY_##_visibility, \
LOGMOD_COLOR_##_color

Helper macro to define label color, style, and visibility at once.

Parameters
_styleStyle name (e.g., BOLD, REGULAR)
_visibilityVisibility name (e.g., FOREGROUND, BACKGROUND)
_colorColor name (e.g., RED, GREEN)

◆ LOGMOD_STYLE_REGULAR

#define LOGMOD_STYLE_REGULAR   "0"

ANSI text style values.

Regular text style

◆ LOGMOD_STYLE_BOLD

#define LOGMOD_STYLE_BOLD   "1"

Bold text style

◆ LOGMOD_STYLE_UNDERLINE

#define LOGMOD_STYLE_UNDERLINE   "4"

Underlined text style

◆ LOGMOD_STYLE_STRIKETHROUGH

#define LOGMOD_STYLE_STRIKETHROUGH   "9"

Strikethrough text style

◆ LOGMOD_VISIBILITY_FOREGROUND

#define LOGMOD_VISIBILITY_FOREGROUND   "3"

ANSI text visibility mode values.

Foreground color

◆ LOGMOD_VISIBILITY_BACKGROUND

#define LOGMOD_VISIBILITY_BACKGROUND   "4"

Background color

◆ LOGMOD_VISIBILITY_INTENSITY

#define LOGMOD_VISIBILITY_INTENSITY   "9"

Intensity (bright) foreground

◆ LOGMOD_VISIBILITY_BACKGROUND_INTENSITY

#define LOGMOD_VISIBILITY_BACKGROUND_INTENSITY    "10"

Intensity (bright) background

◆ LOGMOD_COLOR_BLACK

#define LOGMOD_COLOR_BLACK   "0"

ANSI color values.

Black color

◆ LOGMOD_COLOR_RED

#define LOGMOD_COLOR_RED   "1"

Red color

◆ LOGMOD_COLOR_GREEN

#define LOGMOD_COLOR_GREEN   "2"

Green color

◆ LOGMOD_COLOR_YELLOW

#define LOGMOD_COLOR_YELLOW   "3"

Yellow color

◆ LOGMOD_COLOR_BLUE

#define LOGMOD_COLOR_BLUE   "4"

Blue color

◆ LOGMOD_COLOR_MAGENTA

#define LOGMOD_COLOR_MAGENTA   "5"

Magenta color

◆ LOGMOD_COLOR_CYAN

#define LOGMOD_COLOR_CYAN   "6"

Cyan color

◆ LOGMOD_COLOR_WHITE

#define LOGMOD_COLOR_WHITE   "7"

White color

◆ __LOGMOD_LOGGER_ATTRS

#define __LOGMOD_LOGGER_ATTRS (   _qualifier)
Value:
const char *context_id; \
_qualifier struct logmod_options options; \
const long *counter; \
_qualifier logmod_callback callback; \
void *user_data; \
const struct logmod_label *_qualifier custom_labels; \
_qualifier size_t num_custom_labels; \
_qualifier int disabled
logmod_err(* logmod_callback)(const struct logmod_logger *logger, const struct logmod_info *info, const char *fmt, va_list args)
Callback function type for custom log handling.
Definition: logmod.h:161
Label properties for a log level.
Definition: logmod.h:107
Configuration options for a logger.
Definition: logmod.h:91

Internal macro for defining logger attributes.

Used to define both const and non-const versions of the logger structure with the same fields.

Parameters
_qualifierQualifier to apply to mutable fields (const or empty)

◆ __BLANK

#define __BLANK

◆ logmod_nlog

#define logmod_nlog (   _level,
  _logger,
  _parenthesized_params,
  num_params 
)
Value:
_logmod_log(_logger, __LINE__, __FILE__, LOGMOD_LEVEL_##_level, \
LOGMOD_SPREAD_TUPLE_##num_params _parenthesized_params)
logmod_err _logmod_log(const struct logmod_logger *logger, const unsigned line, const char *const filename, const unsigned level, const char *fmt,...)
Internal logging implementation function.
Definition: logmod.h:1037

Log a message (C89 compatible version)

Parameters
_levelLog level (without LOGMOD_LEVEL_ prefix)
_loggerLogger to use, or NULL for default
_parenthesized_paramsFormat and arguments in parentheses
num_paramsNumber of arguments in the format string

◆ logmod_log

#define logmod_log   logmod_nlog

◆ LOGMOD_ENCODE

#define LOGMOD_ENCODE (   _style,
  _visibility,
  _color,
  buf 
)     "\x1b[" _style ";" _visibility _color "m" buf "\x1b[0m"

Encodes text with ANSI colors and styles.

Parameters
_styleStyle code (LOGMOD_STYLE_* macros)
_visibilityVisibility code (LOGMOD_VISIBILITY_* macros)
_colorColor code (LOGMOD_COLOR_* macros)
bufText buffer to encode

◆ LOGMOD_ENCODE_STATIC

#define LOGMOD_ENCODE_STATIC (   _style,
  _visibility,
  _color,
  buf 
)
Value:
LOGMOD_ENCODE(LOGMOD_STYLE_##_style, LOGMOD_VISIBILITY_##_visibility, \
LOGMOD_COLOR_##_color, buf)
#define LOGMOD_ENCODE(_style, _visibility, _color, buf)
Encodes text with ANSI colors and styles.
Definition: logmod.h:516

Static encoding of text with ANSI colors (compile-time)

Parameters
_styleStyle name (e.g., BOLD, REGULAR)
_visibilityVisibility name (e.g., FOREGROUND, BACKGROUND)
_colorColor name (e.g., RED, GREEN)
bufThe text to encode

◆ LOGMOD_ENCODE_TOGGLE

#define LOGMOD_ENCODE_TOGGLE (   _toggle,
  _style,
  _visibility,
  _color,
  buf 
)     ((_toggle) ? LOGMOD_ENCODE_STATIC(_style, _visibility, _color, buf) : buf)

Dynamic encoding of text with ANSI colors (respects toggle)

Parameters
_toggleToggle to enable or disable color encoding
_styleStyle name (e.g., BOLD, REGULAR)
_visibilityVisibility name (e.g., FOREGROUND, BACKGROUND)
_colorColor name (e.g., RED, GREEN)
bufThe text to encode
Returns
Colored text if toggle is enabled, or original text otherwise

◆ LOGMOD_ENCODE_LOGGER

#define LOGMOD_ENCODE_LOGGER (   _logger,
  _style,
  _visibility,
  _color,
  buf 
)
Value:
LOGMOD_ENCODE_TOGGLE((_logger)->options.color, _style, _visibility, \
_color, buf)
#define LOGMOD_ENCODE_TOGGLE(_toggle, _style, _visibility, _color, buf)
Dynamic encoding of text with ANSI colors (respects toggle)
Definition: logmod.h:541

Dynamic encoding of text with ANSI colors (respects logger color setting)

Parameters
_loggerThe logger instance to check for color enabled setting
_styleStyle name (e.g., BOLD, REGULAR)
_visibilityVisibility name (e.g., FOREGROUND, BACKGROUND)
_colorColor name (e.g., RED, GREEN)
bufThe text to encode
Returns
Colored text if colors enabled, or original text otherwise

◆ LMS

#define LMS   LOGMOD_ENCODE_STATIC

Shorthand for LOGMOD_ENCODE_STATIC.

◆ LMT

#define LMT   LOGMOD_ENCODE_TOGGLE

Shorthand for LOGMOD_ENCODE_TOGGLE.

◆ LML

#define LML   LOGMOD_ENCODE_LOGGER

Shorthand for LOGMOD_ENCODE_LOGGER.

◆ LME

#define LME   LOGMOD_ENCODE

Shorthand for LOGMOD_ENCODE.

◆ LOGMOD_SPREAD_TUPLE_0

#define LOGMOD_SPREAD_TUPLE_0 (   _fmt)    _fmt

◆ LOGMOD_SPREAD_TUPLE_1

#define LOGMOD_SPREAD_TUPLE_1 (   _fmt,
  _1 
)    _fmt, _1

◆ LOGMOD_SPREAD_TUPLE_2

#define LOGMOD_SPREAD_TUPLE_2 (   _fmt,
  _1,
  _2 
)    _fmt, _1, _2

◆ LOGMOD_SPREAD_TUPLE_3

#define LOGMOD_SPREAD_TUPLE_3 (   _fmt,
  _1,
  _2,
  _3 
)    _fmt, _1, _2, _3

◆ LOGMOD_SPREAD_TUPLE_4

#define LOGMOD_SPREAD_TUPLE_4 (   _fmt,
  _1,
  _2,
  _3,
  _4 
)    _fmt, _2, _3, _4

◆ LOGMOD_SPREAD_TUPLE_5

#define LOGMOD_SPREAD_TUPLE_5 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5 
)     _fmt, _1, _2, _3, _4, _5

◆ LOGMOD_SPREAD_TUPLE_6

#define LOGMOD_SPREAD_TUPLE_6 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6 
)     _fmt, _1, _2, _3, _4, _6

◆ LOGMOD_SPREAD_TUPLE_7

#define LOGMOD_SPREAD_TUPLE_7 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7 
)     _fmt, _1, _2, _3, _4, _5, _6, _7

◆ LOGMOD_SPREAD_TUPLE_8

#define LOGMOD_SPREAD_TUPLE_8 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8

◆ LOGMOD_SPREAD_TUPLE_9

#define LOGMOD_SPREAD_TUPLE_9 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9

◆ LOGMOD_SPREAD_TUPLE_10

#define LOGMOD_SPREAD_TUPLE_10 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10

◆ LOGMOD_SPREAD_TUPLE_11

#define LOGMOD_SPREAD_TUPLE_11 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11

◆ LOGMOD_SPREAD_TUPLE_12

#define LOGMOD_SPREAD_TUPLE_12 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12

◆ LOGMOD_SPREAD_TUPLE_13

#define LOGMOD_SPREAD_TUPLE_13 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13

◆ LOGMOD_SPREAD_TUPLE_14

#define LOGMOD_SPREAD_TUPLE_14 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14

◆ LOGMOD_SPREAD_TUPLE_15

#define LOGMOD_SPREAD_TUPLE_15 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15

◆ LOGMOD_SPREAD_TUPLE_16

#define LOGMOD_SPREAD_TUPLE_16 (   _fmt,
  _1,
  _2,
  _3,
  _4,
  _5,
  _6,
  _7,
  _8,
  _9,
  _10,
  _11,
  _12,
  _13,
  _14,
  _15,
  _16 
)     _fmt, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16

◆ LOGMOD_FROM_LOGGER

#define LOGMOD_FROM_LOGGER (   _ctx)
Value:
((struct logmod *)((char *)(_ctx)->counter \
- offsetof(struct logmod, counter)))
Main logging context structure.
Definition: logmod.h:240
long counter
Definition: logmod.h:245

Get logmod from any logmod_logger.

◆ _LOGMOD_EXPECT

#define _LOGMOD_EXPECT (   _cond,
  _error,
  _return 
)
Value:
do { \
if (!(_cond)) { \
switch ((_error)) { \
logmod_nlog(ERROR, NULL, ("Bad parameter: %s", #_cond), 1); \
break; \
case LOGMOD_ERRNO: \
logmod_nlog(ERROR, NULL, \
("System error (check errno): %s", #_cond), 1); \
break; \
default: \
logmod_nlog(ERROR, NULL, ("Unknown error: %s", #_cond), 1); \
break; \
} \
return (_return); \
} \
} while (0)
@ LOGMOD_ERRNO
Definition: logmod.h:80
@ LOGMOD_BAD_PARAMETER
Definition: logmod.h:81

◆ LOGMOD_EXPECT

#define LOGMOD_EXPECT (   _cond,
  _error 
)    _LOGMOD_EXPECT(_cond, _error, _error)

Check if a condition is met and log an error message if not.

Parameters
_condCondition to check
_errorError code to return if the condition is false

Typedef Documentation

◆ logmod_lock

typedef void(* logmod_lock) (const struct logmod_logger *logger, int should_lock)

Lock function type for thread safety.

Parameters
loggerThe logger instance
should_lock1 to acquire lock, 0 to release

◆ logmod_callback

typedef logmod_err(* logmod_callback) (const struct logmod_logger *logger, const struct logmod_info *info, const char *fmt, va_list args)

Callback function type for custom log handling.

Parameters
loggerThe logger instance
infoInformation about the log entry
fmtFormat string
argsVariable arguments list
Returns
LOGMOD_OK to skip default handling, LOGMOD_OK_CONTINUE to also perform default handling

Enumeration Type Documentation

◆ logmod_levels

Log levels supported by LogMod.

Built-in log levels ordered by severity (lowest to highest) Custom log levels should start at LOGMOD_LEVEL_CUSTOM

Enumerator
LOGMOD_LEVEL_TRACE 

Most detailed logging for tracing execution

LOGMOD_LEVEL_DEBUG 

Debug information

LOGMOD_LEVEL_INFO 

Informational messages

LOGMOD_LEVEL_WARN 

Warning messages

LOGMOD_LEVEL_ERROR 

Error messages

LOGMOD_LEVEL_FATAL 

Fatal errors that cause termination

__LOGMOD_LEVEL_MAX 

Internal marker for built-in level count

LOGMOD_LEVEL_CUSTOM 

user defined log level must start with this value

◆ logmod_err

enum logmod_err

Error codes returned by LogMod functions.

Enumerator
LOGMOD_ERRNO 

System error, check errno

LOGMOD_BAD_PARAMETER 

Invalid parameter passed to function

LOGMOD_OK 

Success

LOGMOD_OK_CONTINUE 

Success, continue with default behavior

LOGMOD_OK_SKIPPED 

Success, logger has been skipped from logging due to being disabled by user

Function Documentation

◆ logmod_init()

logmod_err logmod_init ( struct logmod logmod,
const char *const  application_id,
struct logmod_logger  table[],
unsigned  length 
)

Initialize the logging context.

Parameters
logmodPointer to the logging context structure
application_idApplication identifier string
tableArray to store loggers (must be pre-allocated)
lengthCapacity of the table array
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_cleanup()

logmod_err logmod_cleanup ( struct logmod logmod)

Clean up the logging context.

Parameters
logmodPointer to the logging context structure
Returns
LOGMOD_OK on success

◆ logmod_set_lock()

logmod_err logmod_set_lock ( struct logmod logmod,
logmod_lock  lock 
)

Set the lock function for thread safety.

Parameters
logmodPointer to the logging context structure
lockLock function to use
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_set_options()

logmod_err logmod_set_options ( struct logmod logmod,
struct logmod_options  options 
)

Set default options for all new loggers.

Parameters
logmodPointer to the logging context structure
optionsDefault options to use for new loggers
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_toggle_logger()

logmod_err logmod_toggle_logger ( struct logmod logmod,
const char *const  context_id 
)

Toggle a specific logger from logging (default is true)

Parameters
logmodPointer to the logging context structure
context_idThe context id of the logger to be enabled or disabled
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_data()

logmod_err logmod_logger_set_data ( struct logmod_logger logger,
void *  user_data 
)

Set user data for a logger.

Parameters
loggerPointer to the logger
user_dataPointer to user-defined data
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_callback()

logmod_err logmod_logger_set_callback ( struct logmod_logger logger,
const struct logmod_label *const  custom_labels,
const size_t  num_custom_labels,
logmod_callback  callback 
)

Set callback function and custom labels for a logger.

Parameters
loggerPointer to the logger
custom_labelsArray of custom log level labels or NULL
num_custom_labelsNumber of custom labels in the array
callbackCallback function for log processing
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_options()

logmod_err logmod_logger_set_options ( struct logmod_logger logger,
struct logmod_options  options 
)

Set all options for a logger at once.

Parameters
loggerPointer to the logger
optionsOptions structure
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_id_visibility()

logmod_err logmod_logger_set_id_visibility ( struct logmod_logger logger,
int  show_app_id,
int  show_context_id 
)

Set visibility of application ID and context ID in log messages.

Parameters
loggerPointer to the logger
show_app_id1 to show application ID, 0 to hide
show_context_id1 to show context ID, 0 to hide
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_quiet()

logmod_err logmod_logger_set_quiet ( struct logmod_logger logger,
int  quiet 
)

Set quiet mode for a logger.

Parameters
loggerPointer to the logger
quiet1 to enable quiet mode (suppress console output), 0 to disable
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_color()

logmod_err logmod_logger_set_color ( struct logmod_logger logger,
int  color 
)

Set color mode for a logger.

Parameters
loggerPointer to the logger
color1 to enable colored output, 0 to disable
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_level()

logmod_err logmod_logger_set_level ( struct logmod_logger logger,
unsigned  level 
)

Set minimum log level for a logger.

Parameters
loggerPointer to the logger
levelMinimum level to log (messages below this will be suppressed)
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_logfile()

logmod_err logmod_logger_set_logfile ( struct logmod_logger logger,
FILE *  logfile 
)

Set logfile for a logger.

Parameters
loggerPointer to the logger
logfileFile pointer to write logs to, or NULL to disable
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_time()

logmod_err logmod_logger_set_time ( struct logmod_logger logger,
int  show_time 
)

Set time display for a logger.

Parameters
loggerPointer to the logger
show_time0 to suppress time in log messages, 1 to show it
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_logger_set_counter()

logmod_err logmod_logger_set_counter ( struct logmod_logger logger,
int  show_counter 
)

Set counter display for a logger.

Parameters
loggerPointer to the logger
show_counter0 to hide counter in log messages, 1 to show it
Returns
LOGMOD_OK on success, error code on failure

◆ logmod_get_logger()

struct logmod_logger * logmod_get_logger ( struct logmod logmod,
const char *const  context_id 
)

Get or create a logger by context ID.

Parameters
logmodPointer to the logging context
context_idContext identifier string
Returns
Pointer to the logger, or NULL if the table is full

◆ logmod_logger_get_label()

const struct logmod_label * logmod_logger_get_label ( const struct logmod_logger logger,
const unsigned  level 
)

Get the label for a specific log level.

Parameters
loggerPointer to the logger
levelLog level to get the label for
Returns
Pointer to the label structure, or NULL if invalid

< Strikethrough text style

< Intensity (bright) background

< Yellow color

◆ logmod_logger_get_level()

long logmod_logger_get_level ( const struct logmod_logger logger,
const char *const  label 
)

Get the level value for a label name.

Parameters
loggerPointer to the logger
labelLabel name to look up
Returns
Level value, or LOGMOD_BAD_PARAMETER if invalid

◆ logmod_logger_get_counter()

long logmod_logger_get_counter ( const struct logmod_logger logger)

Get the global message counter for a logger.

Parameters
loggerPointer to the logger
Returns
Current counter value, or -1 if logger is NULL

◆ _logmod_log()

logmod_err _logmod_log ( const struct logmod_logger logger,
const unsigned  line,
const char *const  filename,
const unsigned  level,
const char *  fmt,
  ... 
)

Internal logging implementation function.

Parameters
loggerThe logger instance
lineSource line number
filenameSource file path
levelLog level
fmtFormat string
...Format arguments
Returns
logmod_err LOGMOD_OK on success, or error code on failure