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"
57 LOG_CONSOLE_OPEN_NEVER,
58 LOG_CONSOLE_OPEN_AUTO,
59 LOG_CONSOLE_OPEN_ALWAYS,
60} ws_log_console_open_pref;
63ws_log_console_open_pref ws_log_console_open;
66 struct tm tstamp_secs;
73 const char *file,
long line,
const char *func,
75 const char *user_format, va_list user_ap,
84void ws_log_file_writer(FILE *fp,
const char *domain,
enum ws_log_level level,
85 const char *file,
long line,
const char *func,
87 const char *user_format, va_list user_ap);
91void ws_log_console_writer(
const char *domain,
enum ws_log_level level,
92 const char *file,
long line,
const char *func,
94 const char *user_format, va_list user_ap);
220#define LOG_ARGS_NOEXIT -1
222#define LONGOPT_WSLOG_LOG_LEVEL LONGOPT_BASE_WSLOG+1
223#define LONGOPT_WSLOG_LOG_DOMAIN LONGOPT_BASE_WSLOG+2
224#define LONGOPT_WSLOG_LOG_FILE LONGOPT_BASE_WSLOG+3
225#define LONGOPT_WSLOG_LOG_FATAL LONGOPT_BASE_WSLOG+4
226#define LONGOPT_WSLOG_LOG_FATAL_DOMAIN LONGOPT_BASE_WSLOG+5
227#define LONGOPT_WSLOG_LOG_DEBUG LONGOPT_BASE_WSLOG+6
228#define LONGOPT_WSLOG_LOG_NOISY LONGOPT_BASE_WSLOG+7
232#define LONGOPT_WSLOG \
233 {"log-level", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_LEVEL}, \
234 {"log-domain", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_DOMAIN}, \
236 {"log-domains", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_DOMAIN}, \
237 {"log-file", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FILE}, \
238 {"log-fatal", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FATAL}, \
240 {"log-fatal-domain", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FATAL_DOMAIN}, \
241 {"log-fatal-domains", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_FATAL_DOMAIN}, \
242 {"log-debug", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_DEBUG}, \
243 {"log-noisy", ws_required_argument, NULL, LONGOPT_WSLOG_LOG_NOISY},
232#define LONGOPT_WSLOG \ …
251 const char* optstring,
const struct ws_option* long_options,
252 void (*vcmdarg_err)(
const char *, va_list ap),
272void ws_log_init(
void (*vcmdarg_err)(
const char *, va_list ap));
282 void (*vcmdarg_err)(
const char *, va_list ap));
295 void (*vcmdarg_err)(
const char *, va_list ap));
303void ws_log(
const char *domain,
enum ws_log_level level,
304 const char *format, ...) G_GNUC_PRINTF(3,4);
312void ws_logv(const
char *domain, enum ws_log_level level,
313 const
char *format, va_list ap);
323 const
char *file,
long line, const
char *func,
324 const
char *format, ...) G_GNUC_PRINTF(6,7);
333void ws_logv_full(const
char *domain, enum ws_log_level level,
334 const
char *file,
long line, const
char *func,
335 const
char *format, va_list ap);
340void ws_log_fatal_full(const
char *domain, enum ws_log_level level,
341 const
char *file,
long line, const
char *func,
342 const
char *format, ...) G_GNUC_PRINTF(6,7);
350#define _LOG_IF_ACTIVE(active, level, file, line, func, ...) \
353 ws_log_full(_LOG_DOMAIN, level, \
359#define _LOG_FULL(active, level, ...) \
360 _LOG_IF_ACTIVE(active, level, __FILE__, __LINE__, __func__, __VA_ARGS__)
362#define _LOG_SIMPLE(active, level, ...) \
363 _LOG_IF_ACTIVE(active, level, NULL, -1, NULL, __VA_ARGS__)
371#define ws_error(...) \
372 ws_log_fatal_full(_LOG_DOMAIN, LOG_LEVEL_ERROR, \
373 __FILE__, __LINE__, __func__, __VA_ARGS__)
371#define ws_error(...) \ …
379#define ws_critical(...) \
380 _LOG_FULL(true, LOG_LEVEL_CRITICAL, __VA_ARGS__)
379#define ws_critical(...) \ …
386#define ws_warning(...) \
387 _LOG_FULL(true, LOG_LEVEL_WARNING, __VA_ARGS__)
386#define ws_warning(...) \ …
394#define ws_message(...) \
395 _LOG_SIMPLE(true, LOG_LEVEL_MESSAGE, __VA_ARGS__)
394#define ws_message(...) \ …
402#define ws_info(...) \
403 _LOG_SIMPLE(true, LOG_LEVEL_INFO, __VA_ARGS__)
402#define ws_info(...) \ …
409#define ws_debug(...) \
410 _LOG_FULL(_LOG_DEBUG_ENABLED, LOG_LEVEL_DEBUG, __VA_ARGS__)
409#define ws_debug(...) \ …
416#define ws_noisy(...) \
417 _LOG_FULL(_LOG_DEBUG_ENABLED, LOG_LEVEL_NOISY, __VA_ARGS__)
416#define ws_noisy(...) \ …
420#define WS_DEBUG_HERE(...) \
421 _LOG_FULL(true, LOG_LEVEL_ECHO, __VA_ARGS__)
420#define WS_DEBUG_HERE(...) \ …
423#define WS_NOT_IMPLEMENTED() \
424 ws_error("Not implemented yet")
427void ws_log_utf8_full(
const char *domain,
enum ws_log_level level,
428 const char *file,
long line,
const char *func,
429 const char *
string, ssize_t length,
const char *endptr);
432#define ws_log_utf8(str, len, endptr) \
434 if (_LOG_DEBUG_ENABLED) { \
435 ws_log_utf8_full(LOG_DOMAIN_UTF_8, LOG_LEVEL_DEBUG, \
436 __FILE__, __LINE__, __func__, \
448 const char *file,
long line,
const char *func,
449 const uint8_t *
buffer,
size_t size,
450 size_t max_bytes_len,
const char *msg);
453#define ws_log_buffer(buf, size, msg) \
455 if (_LOG_DEBUG_ENABLED) { \
456 ws_log_buffer_full(_LOG_DOMAIN, LOG_LEVEL_DEBUG, \
457 __FILE__, __LINE__, __func__, \
458 buf, size, 36, msg ? msg : #buf); \
472 const char *file,
long line,
const char *func,
473 const char *format, ...) G_GNUC_PRINTF(6,7);
486void ws_log_print_usage(FILE *fp);
Definition mcast_stream.h:30
Definition ws_getopt.h:42
WS_DLL_PUBLIC void ws_log(const char *domain, enum ws_log_level level, const char *format,...) G_GNUC_PRINTF(3
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)
Definition wslog.c:623
WS_DLL_PUBLIC void ws_log_set_domain_filter(const char *domain_filter)
Definition wslog.c:561
WS_DLL_PUBLIC void ws_log_set_debug_filter(const char *str_filter)
Definition wslog.c:575
void() ws_log_writer_free_data_cb(void *user_data)
Definition wslog.h:80
WS_DLL_PUBLIC void ws_log_set_fatal_domain_filter(const char *domain_filter)
Definition wslog.c:568
WS_DLL_PUBLIC void ws_log_console_writer_set_use_stdout(bool use_stdout)
Definition wslog.c:1215
WS_DLL_PUBLIC enum ws_log_level ws_log_set_level(enum ws_log_level level)
Definition wslog.c:351
WS_DLL_PUBLIC void ws_log_set_noisy_filter(const char *str_filter)
Definition wslog.c:582
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)
Definition wslog.c:996
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)
Definition wslog.c:388
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
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:72
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)
Definition wslog.c:1168
WS_DLL_PUBLIC enum ws_log_level ws_log_set_fatal_level(enum ws_log_level level)
Definition wslog.c:589
WS_DLL_PUBLIC void ws_log_init(void(*vcmdarg_err)(const char *, va_list ap))
Definition wslog.c:695
WS_DLL_PUBLIC void WS_DLL_PUBLIC void ws_log_add_custom_file(FILE *fp)
Definition wslog.c:1238
WS_DLL_PUBLIC WS_RETNONNULL const char * ws_log_level_to_string(enum ws_log_level level)
Definition wslog.c:137
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
WS_DLL_PUBLIC void ws_log_init_with_writer(ws_log_writer_cb *writer, void(*vcmdarg_err)(const char *, va_list ap))
Definition wslog.c:771
WS_DLL_PUBLIC void WS_DLL_PUBLIC void ws_logv(const char *domain, enum ws_log_level level, const char *format, va_list ap)
Definition wslog.c:985
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))
Definition wslog.c:779
WS_DLL_PUBLIC bool ws_log_is_wslog_arg(int arg)
Definition wslog.c:503
WS_DLL_PUBLIC enum ws_log_level ws_log_get_level(void)
Definition wslog.c:345
WS_DLL_PUBLIC void ws_log_set_writer(ws_log_writer_cb *writer)
Definition wslog.c:612
WS_DLL_PUBLIC bool ws_log_msg_is_active(const char *domain, enum ws_log_level level)
Definition wslog.c:279
WS_DLL_PUBLIC enum ws_log_level ws_log_set_fatal_level_str(const char *str_level)
Definition wslog.c:603
WS_DLL_PUBLIC enum ws_log_level ws_log_set_level_str(const char *str_level)
Definition wslog.c:363