22#include <ws_symbol_export.h>
23#include <ws_attributes.h>
24#include <ws_log_defs.h>
25#include <ws_posix_compat.h>
29#define _LOG_DOMAIN WS_LOG_DOMAIN
35#define _LOG_DEBUG_ENABLED true
37#define _LOG_DEBUG_ENABLED false
54#define LOG_HKCU_CONSOLE_OPEN "ConsoleOpen"
78 struct tm tstamp_secs;
85 const char *file,
long line,
const char *func,
87 const char *user_format, va_list user_ap,
109 const char *file,
long line,
const char *func,
111 const char *user_format, va_list user_ap);
127 const char *file,
long line,
const char *func,
129 const char *user_format, va_list user_ap);
314#define LOG_ARGS_NOEXIT -1
316#define LONGOPT_WSLOG_LOG_LEVEL LONGOPT_BASE_WSLOG+1
317#define LONGOPT_WSLOG_LOG_DOMAIN LONGOPT_BASE_WSLOG+2
318#define LONGOPT_WSLOG_LOG_FILE LONGOPT_BASE_WSLOG+3
319#define LONGOPT_WSLOG_LOG_FATAL LONGOPT_BASE_WSLOG+4
320#define LONGOPT_WSLOG_LOG_FATAL_DOMAIN LONGOPT_BASE_WSLOG+5
321#define LONGOPT_WSLOG_LOG_DEBUG LONGOPT_BASE_WSLOG+6
322#define LONGOPT_WSLOG_LOG_NOISY LONGOPT_BASE_WSLOG+7
326#define LONGOPT_WSLOG \
327 {"log-level", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_LEVEL}, \
328 {"log-domain", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_DOMAIN}, \
330 {"log-domains", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_DOMAIN}, \
331 {"log-file", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FILE}, \
332 {"log-fatal", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FATAL}, \
334 {"log-fatal-domain", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FATAL_DOMAIN}, \
335 {"log-fatal-domains", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FATAL_DOMAIN}, \
336 {"log-debug", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_DEBUG}, \
337 {"log-noisy", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_NOISY},
356 const char* optstring,
const struct ws_option* long_options,
357 void (*vcmdarg_err)(
const char *, va_list ap),
385void ws_log_init(
void (*vcmdarg_err)(
const char *, va_list ap),
const char* console_title);
400 void (*vcmdarg_err)(
const char *, va_list ap),
const char* console_title);
420 void (*vcmdarg_err)(
const char *, va_list ap),
const char* console_title);
436void ws_log(
const char *domain,
enum ws_log_level level,
437 const char *format, ...) G_GNUC_PRINTF(3,4);
452void ws_logv(const
char *domain, enum ws_log_level level,
453 const
char *format, va_list ap);
474 const
char *file,
long line, const
char *func,
475 const
char *format, ...) G_GNUC_PRINTF(6,7);
494void ws_logv_full(const
char *domain, enum ws_log_level level,
495 const
char *file,
long line, const
char *func,
496 const
char *format, va_list ap);
517 const
char *file,
long line, const
char *func,
518 const
char *format, ...) G_GNUC_PRINTF(6,7);
526#define _LOG_IF_ACTIVE(active, level, file, line, func, ...) \
529 ws_log_full(_LOG_DOMAIN, level, \
535#define _LOG_FULL(active, level, ...) \
536 _LOG_IF_ACTIVE(active, level, __FILE__, __LINE__, __func__, __VA_ARGS__)
538#define _LOG_SIMPLE(active, level, ...) \
539 _LOG_IF_ACTIVE(active, level, NULL, -1, NULL, __VA_ARGS__)
550#define ws_error(...) \
551 ws_log_fatal_full(_LOG_DOMAIN, LOG_LEVEL_ERROR, \
552 __FILE__, __LINE__, __func__, __VA_ARGS__)
564#define ws_critical(...) \
565 _LOG_FULL(true, LOG_LEVEL_CRITICAL, __VA_ARGS__)
577#define ws_warning(...) \
578 _LOG_FULL(true, LOG_LEVEL_WARNING, __VA_ARGS__)
590#define ws_message(...) \
591 _LOG_SIMPLE(true, LOG_LEVEL_MESSAGE, __VA_ARGS__)
603#define ws_info(...) \
604 _LOG_SIMPLE(true, LOG_LEVEL_INFO, __VA_ARGS__)
617#define ws_debug(...) \
618 _LOG_FULL(_LOG_DEBUG_ENABLED, LOG_LEVEL_DEBUG, __VA_ARGS__)
631#define ws_noisy(...) \
632 _LOG_FULL(_LOG_DEBUG_ENABLED, LOG_LEVEL_NOISY, __VA_ARGS__)
644#define WS_DEBUG_HERE(...) \
645 _LOG_FULL(true, LOG_LEVEL_ECHO, __VA_ARGS__)
654#define WS_NOT_IMPLEMENTED() \
655 ws_error("Not implemented yet")
676 const char *file,
long line,
const char *func,
677 const char *
string, ssize_t length,
const char *endptr);
692#define ws_log_utf8(str, len, endptr) \
694 if (_LOG_DEBUG_ENABLED) { \
695 ws_log_utf8_full(LOG_DOMAIN_UTF_8, LOG_LEVEL_DEBUG, \
696 __FILE__, __LINE__, __func__, \
721 const char *file,
long line,
const char *func,
722 const uint8_t *
buffer,
size_t size,
723 size_t max_bytes_len,
const char *msg);
737#define ws_log_buffer(buf, size, msg) \
739 if (_LOG_DEBUG_ENABLED) { \
740 ws_log_buffer_full(_LOG_DOMAIN, LOG_LEVEL_DEBUG, \
741 __FILE__, __LINE__, __func__, \
742 buf, size, 36, msg ? msg : #buf); \
764 const char *file,
long line,
const char *func,
765 const char *format, ...) G_GNUC_PRINTF(6,7);
Definition mcast_stream.h:30
Log manifest entry containing timestamp and process ID.
Definition wslog.h:77
intmax_t pid
Definition wslog.h:80
long nanosecs
Definition wslog.h:79
Structure representing a long-form command-line option.
Definition ws_getopt.h:64
WS_DLL_PUBLIC void ws_log(const char *domain, enum ws_log_level level, const char *format,...) G_GNUC_PRINTF(3
Output a formatted message to the log.
WS_DLL_PUBLIC void ws_log_set_writer_with_data(ws_log_writer_cb *writer, void *user_data, ws_log_writer_free_data_cb *free_user_data)
Set the active log writer with user data.
Definition wslog.c:624
WS_DLL_PUBLIC void ws_log_set_domain_filter(const char *domain_filter)
Set a domain filter from a string.
Definition wslog.c:562
WS_DLL_PUBLIC void ws_log_console_writer(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, ws_log_manifest_t *mft, const char *user_format, va_list user_ap)
Write a formatted log message to the console.
Definition wslog.c:1206
WS_DLL_PUBLIC void ws_log_set_debug_filter(const char *str_filter)
Set a debug filter from a string.
Definition wslog.c:576
WS_DLL_PUBLIC void ws_log_print_usage(FILE *fp)
Print usage information for logging-related command-line options.
Definition wslog.c:1272
WS_DLL_PUBLIC void ws_log_init_with_writer_and_data(ws_log_writer_cb *writer, void *user_data, ws_log_writer_free_data_cb *free_user_data, void(*vcmdarg_err)(const char *, va_list ap), const char *console_title)
Initialize the logging system with a custom writer and user data.
Definition wslog.c:783
void() ws_log_writer_free_data_cb(void *user_data)
Definition wslog.h:92
WS_DLL_PUBLIC void ws_log_file_writer(FILE *fp, const char *domain, enum ws_log_level level, const char *file, long line, const char *func, ws_log_manifest_t *mft, const char *user_format, va_list user_ap)
Write a formatted log message to a file stream.
Definition wslog.c:1194
ws_log_console_open_pref
Console open preference for logging output.
Definition wslog.h:61
@ LOG_CONSOLE_OPEN_ALWAYS
Definition wslog.h:64
@ LOG_CONSOLE_OPEN_NEVER
Definition wslog.h:62
@ LOG_CONSOLE_OPEN_AUTO
Definition wslog.h:63
WS_DLL_PUBLIC void ws_log_init(void(*vcmdarg_err)(const char *, va_list ap), const char *console_title)
Initialize the logging system.
WS_DLL_PUBLIC void ws_log_set_fatal_domain_filter(const char *domain_filter)
Set a fatal domain filter from a string.
Definition wslog.c:569
WS_DLL_PUBLIC void ws_log_console_writer_set_use_stdout(bool use_stdout)
Configure log levels "info" and below to use stdout.
Definition wslog.c:1219
WS_DLL_PUBLIC enum ws_log_level ws_log_set_level(enum ws_log_level level)
Set the active log level.
Definition wslog.c:352
WS_DLL_PUBLIC WS_NORETURN void ws_log_fatal_full(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const char *format,...) G_GNUC_PRINTF(6
Output a fatal log message with source context and abort the program.
WS_DLL_PUBLIC void ws_log_set_noisy_filter(const char *str_filter)
Set a noisy filter from a string.
Definition wslog.c:583
WS_DLL_PUBLIC void WS_DLL_PUBLIC void ws_logv_full(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const char *format, va_list ap)
Output a formatted log message with source context using a va_list.
Definition wslog.c:1000
WS_DLL_PUBLIC int ws_log_parse_args(int *argc_ptr, char *argv[], const char *optstring, const struct ws_option *long_options, void(*vcmdarg_err)(const char *, va_list ap), int exit_failure)
Parse command-line arguments for log options.
Definition wslog.c:389
WS_DLL_PUBLIC void ws_log_write_always_full(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const char *format,...) G_GNUC_PRINTF(6
Emit a log message unconditionally with full source context.
void() ws_log_writer_cb(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const char *fatal_msg, ws_log_manifest_t *mft, const char *user_format, va_list user_ap, void *user_data)
Definition wslog.h:84
WS_DLL_PUBLIC void ws_log_buffer_full(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const uint8_t *buffer, size_t size, size_t max_bytes_len, const char *msg)
Output a formatted log message for a byte buffer with source context.
Definition wslog.c:1172
WS_DLL_PUBLIC enum ws_log_level ws_log_set_fatal_level(enum ws_log_level level)
Set the fatal log level.
Definition wslog.c:590
WS_DLL_PUBLIC void WS_DLL_PUBLIC void ws_log_add_custom_file(FILE *fp)
Add an auxiliary file output for log messages.
Definition wslog.c:1242
WS_DLL_PUBLIC WS_RETNONNULL const char * ws_log_level_to_string(enum ws_log_level level)
Convert a numerical log level to its string representation.
Definition wslog.c:138
WS_DLL_PUBLIC void ws_log_full(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const char *format,...) G_GNUC_PRINTF(6
Output a formatted log message with source context.
WS_DLL_PUBLIC void WS_DLL_PUBLIC void ws_logv(const char *domain, enum ws_log_level level, const char *format, va_list ap)
Output a formatted message to the log using a va_list.
Definition wslog.c:989
WS_DLL_PUBLIC bool ws_log_is_wslog_arg(int arg)
Determine if a command-line argument is used by wslog.
Definition wslog.c:504
WS_DLL_PUBLIC void ws_log_utf8_full(const char *domain, enum ws_log_level level, const char *file, long line, const char *func, const char *string, ssize_t length, const char *endptr)
Output a UTF-8 encoded log message with source context.
Definition wslog.c:1137
WS_DLL_PUBLIC enum ws_log_level ws_log_get_level(void)
Get the currently active global log level.
Definition wslog.c:346
WS_DLL_PUBLIC void ws_log_init_with_writer(ws_log_writer_cb *writer, void(*vcmdarg_err)(const char *, va_list ap), const char *console_title)
Initialize the logging system with a custom writer.
Definition wslog.c:775
WS_DLL_PUBLIC void ws_log_set_writer(ws_log_writer_cb *writer)
Set the active log writer.
Definition wslog.c:613
WS_DLL_PUBLIC bool ws_log_msg_is_active(const char *domain, enum ws_log_level level)
Check if a log message will be output for a given domain and level.
Definition wslog.c:280
WS_DLL_PUBLIC enum ws_log_level ws_log_set_fatal_level_str(const char *str_level)
Set the fatal log level from a string.
Definition wslog.c:604
WS_DLL_PUBLIC enum ws_log_level ws_log_set_level_str(const char *str_level)
Set the active log level from a string.
Definition wslog.c:364