8 #include <wayland-server.h>
10 #include "libds/log.h"
12 static bool colored = true;
13 static enum ds_log_level log_level = DS_ERR;
15 static const char *level_colors[] = {
17 [DS_ERR] = "\x1B[1;31m",
18 [DS_INF] = "\x1B[1;34m",
19 [DS_DBG] = "\x1B[1;90m",
22 static const char *level_headers[] = {
29 static void log_stderr(enum ds_log_level level, const char *fmt, va_list args);
30 static void log_wl(const char *fmt, va_list args);
32 static ds_log_func_t log_callback = log_stderr;
35 ds_log_init(enum ds_log_level level, ds_log_func_t callback)
37 if (level < DS_LOG_LEVEL_LAST)
40 log_callback = callback;
42 wl_log_set_handler_server(log_wl);
46 _ds_vlog(enum ds_log_level level, const char *fmt, va_list args)
48 log_callback(level, fmt, args);
52 _ds_log(enum ds_log_level level, const char *fmt, ...)
57 log_callback(level, fmt, args);
62 ds_log_get_level(void)
68 log_stderr(enum ds_log_level level, const char *fmt, va_list args)
70 bool colored_tty = false;
73 if (level > log_level)
76 c = (level < DS_LOG_LEVEL_LAST) ? level : DS_LOG_LEVEL_LAST - 1;
78 colored_tty = colored && isatty(STDERR_FILENO);
80 fprintf(stderr, "%s", level_colors[c]);
82 fprintf(stderr, "%s ", level_headers[c]);
84 vfprintf(stderr, fmt, args);
87 fprintf(stderr, "\x1B[0m");
88 fprintf(stderr, "\n");
92 log_wl(const char *fmt, va_list args)
94 static char ds_fmt[1024];
97 n = snprintf(ds_fmt, sizeof(ds_fmt), "[wayland] %s", fmt);
98 if (n > 0 && ds_fmt[n - 1] == '\n')
100 _ds_vlog(DS_INF, ds_fmt, args);